6

Я хотел бы использовать аутентификацию на основе ключей для входа на один из моих компьютеров. У него sshd работает на порте, который по умолчанию не равен 22. Я хочу использовать ssh-copy-id чтобы добавить мой ключ в список авторизованных ключей. Я попытался указать порт, используя -p , как и для самой команды ssh. Однако тогда я получаю действительно странные сообщения об ошибках.

Например

user@box:~$ ssh-copy-id -p 57777 -i ~/.ssh/id_rsa.pub user@192.168.1.111
Bad port 'umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys'

user@box:~$ ssh-copy-id '-p 57777' -i ~/.ssh/id_rsa.pub user@192.168.1.111 
Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh: Could not resolve hostname umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys: Name or service not known

Как я могу заставить это работать? (Я знаю, что могу вручную добавить ключ в файл author_keys на сервере. Но мне лень и определенно любопытно, как убедить ssh-copy-id сделать свою работу :))

2 ответа2

9

Цитирование уже было хорошей идеей, но лучше сделайте это так:

ssh-copy-id -i /home/user/.ssh/id_rsa.pub '-p 57777 user@192.168.1.111'

Поместите все, что вы хотите сказать команде ssh, которую скрипт использует в конце, и процитируйте все это. Сценарий ожидает, что последним аргументом будет имя хоста, и, следовательно, копирует его в конце сгенерированной команды ssh.

(Видимо, это известная проблема. Смотрите этот отчет об ошибке и этот)

1

Для тех, кто хочет заменить скрипт здесь мой ssh-copy-id.sh

#!/bin/bash
ssh $* 'mkdir -p ~/.ssh;echo '`cat ~/.ssh/id_rsa.pub`' >> ~/.ssh/authorized_keys;chmod 700 ~/.ssh;chmod 600 ~/.ssh/authorized_keys'

Теперь вы можете просто ssh-copy-id.sh blah@stuff.com -p123456

Очевидно, что он не такой причудливый, как настоящий, но, по крайней мере, он работает для вошедшего в систему пользователя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .