我想使用基于密钥的身份验证登录我的其中一台计算机。它的 sshd 运行在默认端口 22 之外。我想使用 将ssh-copy-id
我的密钥添加到授权密钥列表中。我尝试使用 指定端口-p
,就像 ssh 命令本身一样。但是我收到了非常奇怪的错误消息。
例如
user@box:~$ ssh-copy-id -p 57777 -i ~/.ssh/id_rsa.pub [email protected]
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 [email protected]
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
我怎样才能让它工作?(我知道我可以手动将密钥添加到服务器上的authorized_keys文件中。但我很懒,而且非常好奇如何说服ssh-copy-id完成它的工作:))
答案1
引用已经是一个好主意,但最好这样做:
ssh-copy-id -i /home/user/.ssh/id_rsa.pub '-p 57777 [email protected]'
将您想告诉脚本使用的 ssh 命令的所有内容放在末尾,并引用所有内容。脚本认为最后一个参数是主机名,因此将其复制到生成的 ssh 命令的末尾。
答案2
对于那些想要替换脚本的人来说,这是我的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 [email protected] -p123456
显然,它不如真正的那么花哨,但至少它对于登录的用户来说是有用的。