É possível executar ssh-copy-id na porta que não seja 22?

99

Eu tenho um servidor com SSH em execução em uma porta não padrão. Em vez de 22, é executado no 8129. Para fazer login, eu uso:

ssh -p 8129 hostname

Agora, sempre que eu precisar configurar uma chave para o login sem senha, eu tenho que copiar a chave pública e adicioná-la manualmente a allowed_keys. Descobri que o comando ssh-copy-idpoderia ser usado para simplificar esse processo, mas parece que ele não tem uma opção para especificar a porta do servidor ssh.

Existe alguma maneira de dizer ssh-copy-idpara usar a porta 8129, ou devo esquecer este comando e copiar / colar manualmente como antes?

Milan Babuškov
fonte

Respostas:

112
$ ssh-copy-id "-p 8129 user@host"

Fonte: http://it-ride.blogspot.com/2009/11/use-ssh-copy-id-on-different-port.html

NOTA: A porta deve estar na frente do usuário @ host ou não será resolvida

Jsan
fonte
11
É realmente estúpido, que sshtem uma sintaxe ssh -p 1234 user@host, ssh-copy-id "-p 1234 user@host"e, finalmente scp -P 1234 user@host. Seria tão bom ter a mesma sintaxe.
Tombart
2
@ Tombart e, em seguida, rsync tem rsync -e "ssh -p 1234" user@host. Juro que é mais complicado do que vale a pena usar uma porta personalizada.
precisa saber é o seguinte
1
A resposta de @Colt McCormack explica que isso é aprimorado em novas versões, e essa sintaxe peculiar não é mais necessária.
meshy
1
Para sua informação, o comando full requer o IP digitado duas vezes e deve se parecer com:ssh-copy-id "[email protected] -p 12345" -i ~/.ssh/id_rsa.pub 192.168.0.100
degenerate
1
No macOS (eu estou em High Sierra), as cotações não são necessárias. ie ssh-copy-id -p 8129 user@hosttrabalho.
Arjun Mehta
46

ssh-copy-idnão aceita nenhum argumento que possa ser transmitido ao sshcomando subjacente , mas você pode configurar um alias em ~/.ssh/config.

Host myhost
HostName hostname
Port 8129

Então corra ssh-copy-id myhost.

Gilles
fonte
3
Isso também tem o benefício de remover a necessidade do -psinalizador em sshtentativas regulares . Portanto, não é apenas a resposta certa para esta pergunta, é a coisa certa, ponto final.
Warren Young
Obrigado por isso. A segunda linha "HostName hostname" não é necessária se você estiver satisfeito com o hostname natural do host.
Lonniebiz
17

A partir do openssh-client_6.2, agora existe um sinalizador de porta dedicado para o comando, permitindo esta sintaxe:

ssh-copy-id -p 8129 user@example

Ele também adicionou suporte para adicionar outras opções ssh com o sinalizador -o.

Aqui está a página do manual do Ubuntu para a versão apropriada, apresentada em 13.04: http://manpages.ubuntu.com/manpages/saucy/man1/ssh-copy-id.1.html

Colt McCormack
fonte
3
Este é o único método que funcionou para o.
Luca Steeb
11

Uma rápida olhada na fonte indica que ssh-copy-idparece não ter nenhuma função que permita isso. No entanto, você pode fazer algo como o seguinte:

ssh -p8129 user@host 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_*.pub
Chris Down
fonte
6

Isso funciona ( daqui ):

ssh-copy-id -i ~/.ssh/id_rsa.pub '-p 221 username@host'
DJR
fonte
5

Eu sempre costumava scpcopiá-lo:

scp -P 8129 ~/.ssh/id_*.pub user@host:
ssh -p 8129 user@host 'cat id_*.pub >> ~/.ssh/authorized_keys'

Embora eu deva dizer, provavelmente usarei os outros métodos (uma linha / conexão) se os lembrar no futuro. Mas essa é outra opção para você.

Kevin
fonte
2

No CentOS7 é apenas:

 ssh-copy-id "-p 1234" user@host

Tome cuidado para não colocar user @ host entre aspas ou você receberá o seguinte erro nesta distribuição:

/usr/bin/ssh-copy-id: ERROR: Bad port ' 1234 user@host'
Max Cuttins
fonte
0

Com o meu macOS, isso funcionou.

ssh-copy-id -i ~/.ssh/id_rsa.pub -p <port> user@host
Jin Kwon
fonte
0

Eu uso este comando:

ssh-copy-id ssh://user@ip_addr:port

Exemplo:

ssh-copy-id ssh://[email protected]:23

Carlos
fonte