我需要在两台服务器之间建立 ssh 会话,并且不想每次都让脚本填写用户名和密码。
但是我似乎无法找出 SSH 服务器从哪里使用其配置。
bash-2.05# ssh -V
Sun_SSH_1.1, SSH protocols 1.5/2.0, OpenSSL 0x0090700f
我在 /etc/ssh/ 和 ~/.ssh/ 中都有证书文件。我只能找到一个 SSH 配置文件,它位于 /etc/ssh/ssh_config 中,但它不包含任何数据(所有内容都被注释掉了)。
有人知道我如何才能找到证书的存储位置,或者如何导出证书以便将其传输到其他服务器吗?我希望配置文件能给我答案,但它们几乎没有帮助。
答案1
假设您指的是“证书”中的用户级公钥认证,并且您使用ssh-keygen
默认位置创建了它们,那么它们应该位于您的 ssh 客户端可以找到它们的位置。密钥由私有部分(通常存储在 中)~/.ssh/id_rsa
和公共部分(存储在 中)组成~/.ssh/id_rsa.pub
。最后一个必须传输到远程服务器,通常传输到~/.ssh/authorized_keys
。
将密钥传输到另一台服务器的最简单方法是使用ssh-copy-id
目标机器。如果您在创建时使用了默认位置,则会自动使用此密钥。
注意,这/etc/ssh/ssh_config
是针对客户端的。在服务器上,您必须查看/etc/ssh/sshd_config
。在您的设置中,两个服务器都将充当 ssh-client 和 ssh-server,因此您必须查看两端的两个文件。
答案2
您需要找到将成为脚本登录用户的用户的 ssh 公钥。
例如,如果我有服务器A和服务器B,我会执行以下操作。
sudo adduser scriptrunner
...
sudo su - scriptrunner
ssh-keygen
...
cat .ssh/id_rsa.pub
ssh-rsa AAAAB3Nza...... scriptrunner@serverA
然后在 ServerB 上执行类似操作
然后在 serverA 上,将 serverB 的 scriptrunner 用户的公钥注入/home/scriptrunner/.ssh/authorized_keys
并在 serverB 上执行相反的操作(使用 serverA 的 scriptrunner 用户进入/home/scriptrunner/.ssh/authorized_keys
serverB 上的 authorized_keys)
然后您应该能够
ssh scriptrunner@serverA
使用密钥从服务器B 执行操作,反之亦然。
您还可以使用它ssh-copy-id
来执行authorized_keys位。
答案3
为了建立使用公钥身份验证的 ssh 连接,发起连接的用户需要拥有公钥/私钥对。在许多 Linux 发行版中,这些密钥不是默认生成的,必须由用户自己生成(或由管理员代表他们生成)。
如果你以相关用户身份登录,请转到你的主目录并运行
ssh-keygen
接受所有默认设置,新的密钥对将在 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub 中创建。现在复制公钥并将其粘贴到目标计算机上目标用户帐户的 ~/.ssh/authorized_keys 文件中。然后在目标计算机上启用公钥身份验证(在 /etc/ssh/sshd_config 中),一切就绪了。
笔记:第一次执行此过程时,可能会出现许多陷阱。所有权限必须正确,文件必须放在正确的位置。最好遵循类似 HowTo 的说明这个。