作为启动脚本的一部分,我必须自动打开几个 gnome-terminal 窗口,其中一个终端会自动发送:
ssh [email protected]
这样做的限制是我仍然需要输入密码才能完成 SSH 连接。
我想要做的是让我的脚本启动命令并完成连接。为此,我尝试按照已接受答案中概述的说明进行操作这里。
从我希望连接的系统,我运行:
ssh-keygen
Enter file in which to save the key: /home/user/ssh/keys/server1key
然后它提示我输入密码。我把密码留空了,因为我不确定它是干什么用的,所以我猜想设置密码后每次使用时都需要用该密码解锁。
继续按照上面链接的说明,我运行并收到以下内容:
ssh-copy-id user@IP
ERROR: No identities found
快速搜索后发现,我需要指定密钥的位置,因为它不在默认保存位置,所以我修复了这个问题:
ssh-copy-id -i /home/user/ssh/keys/server1key.pub [email protected]
在询问服务器密码后,它成功添加了密钥。但是,当我尝试使用“ssh user@IP”登录时,系统仍提示我输入密码。
据我所知,我正确地遵循了链接的说明,所以要么是我遗漏了什么,要么是现有的配置阻止我完成这项工作?
两个系统都使用 18.04 和 openssh。
答案1
ssh-copy-id
其失败的原因与第一次失败的原因相同- 例如因为您为身份文件选择了非默认位置。
-i /home/user/ssh/keys/server1key
您可以通过在命令中添加以下内容以相同的方式解决该问题ssh
- 请注意,客户端需要私人的密钥文件。
从man ssh
-i identity_file
Selects a file from which the identity (private key) for public
key authentication is read. The default is ~/.ssh/identity for
protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.
或者,您可能希望~/.ssh/config
为主机创建一个文件条目,如下所示
Host somename
Hostname 192.168.1.3
User user
IdentityFile /home/user/ssh/keys/server1key
答案2
失败的另一个原因ssh-copy-id
是密钥尚未添加到 SSH 代理。
首先,检查是否ssh-agent
正在运行并启动:
eval "$(ssh-agent -s)"
如果你获得了进程 ID,你可以添加你的密钥:
ssh-add -k /home/user/ssh/keys/server1key
将-k
钥匙添加到钥匙链中。
检查是否添加了键:
ssh-add -l
ssh-copy-id
现在应该可以工作了。
答案3
希望这对您有用......“sshpass -p yourpassword”它将自动登录到远程主机。
[root@localhost .ssh]# sshpass -p 密码123 ssh -l root 本地主机
答案4
只需执行2个命令:
ssh-keygen
ssh-copy-id
长答案:
user@ip:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): temp_file
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in stemp.
Your public key has been saved in stemp.pub.
The key fingerprint is:
SHA256:5**M user@ip
The key's randomart image is:
+---[RSA 2048]----+
| ... |
| ... |
| .. |
| ..+. o . |
| |
| B |
| |
|= * |
|=+ o . |
+----[SHA256]-----+
进而:
user@ip:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ipDestination -p portDest