使用OpenSSH密钥、certificates.pem和.pu
使用预先生成的文件-服务器和客户端都知道的密钥或证书,客户端不必使用密码连接到服务器。使用带有-i参数(身份文件)的ssh命令行连接到服务器时,将存储库中的.pem文件的链接传递给您很容易,例如:
$ ssh -i ~/ec2.pem ubuntu@12.34.56.78
ec2.pem是包含公共证书的文件,ubuntu是用户名,然后添加@ your.public.ip.address或主机名
具有SSH访问和密码的服务器-在不使用密码的情况下启用身份验证
第一步是生成密钥对和pem文件。
下一步是使用SSH,第一次使用密码将证书通过命令行上传到远程服务器。
最后一步,在不使用密码的情况下测试到服务器的连接客户端。
1)如何在没有密码的情况下生成用于验证的密钥对
$ ssh-keygen -t rsa -b 2048 -v
输入此命令以使用详细(在执行过程中询问的问题)模式和公共.pem X.509证书来生成2,048位RSA密钥。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/anonymouse/.ssh/id_rsa): <keyname>
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in <keyname>.
Your public key has been saved in <keyname>.pub.
The key fingerprint is:
bb:c6:9c:ee:6b:c0:67:58:b2:bb:4b:44:72:d3:cc:a5 localhost@localhost
The key's randomart image is:
将要求您提供文件名<keyname>(例如<keyname>为win),它将生成win.pub文件和不带文件扩展名的win文件,将其重命名为win.pem,文件将在当前目录中创建在终端窗口中打开。系统将要求您输入密码,这是为了确保证书在本地计算机上的安全,我通过按Enter忽略了此选项,因为这是自愿选项,我对本地计算机的安全性充满信心。
2)将生成的证书从客户端计算机上传到服务器
这样做是为了 使服务器可以识别客户端,两者都可以访问这些证书并进行比较。要在服务器上上传证书,我们需要建立安全连接,这一次,如果一切顺利,可能是最后一次使用密码了。
$ ssh-copy-id -i ~/win.pub root@12.34.56.78
root@12.34.56.78的密码:(用户名和IP写自己的IP)
现在,尝试使用“ ssh'root@12.34.56.78'”登录到计算机,并签入: 以确保我们没有添加您不期望的额外密钥,您可能仍想使用密码。 ~/.ssh/authorized_keys
因此,要检查ID是否已成功将密钥上传到服务器,请登录服务器:
$ sudo nano ~/.ssh/authorized_keys 或 $ sudo cat
您应该会看到一个文件,其中包含一行或多行随机字符,这些是本机已知的上载或生成的密钥。~/.ssh/authorized_keys
我的 看起来像这样,我从两行的右边截去了几百个字符:~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAX ...
ssh-rsa AQCqFd4B798zz9Lu+a3jGjhVXBRx ...
每行都是ssh-rsa密钥,您可能要检查一下是否意外上传了不需要的内容,但首先,其中一行应包含与hetzner.pub(您的.pub文件, (已上传的文件),则可以在本地计算机上的任何文本编辑器中打开.pub文件,以确保,
3)测试连接
$ sudo ssh -i ~/win.pem root@12.34.56.78
应该在不使用密码的情况下与您建立联系,请注意,我现在不是在使用.pub而是.pem,这是一个文件win,我们已在步骤1中将其重命名为win.pem。您可能需要在首次登录时以“是”确认密钥对。这两个文件都是在第1步中使用 $ ssh-keygen -t rsa -b 2048 -v命令生成的,但其中一个没有后缀。
在客户端
如果您不希望在每次连接到远程服务器时在客户端计算机上每次都提供密钥路径,则必须告诉OpenSSH在哪里查找私钥,默认情况下它会在〜/ .ssh / id_rsa和其他文件夹中查找,请使用ssh与-v参数,详细模式将逐步在屏幕上打印其操作。通常,此文件应包含以下内容
-----BEGIN RSA PRIVATE KEY-----
fjksdfjsdlfjksdlfjlsdjfsdl0GrdNS326iv4CcJHASJ2EMpXnIaUpBtc5U2SY14yq8/4gfRLHLdbwzzx/O
PEjlPv1BX4OJlxSWtKPaQsb5QsgwJseoNmBl1djTSY3haZS9P89MsNKiqlv1XtwbcMYOQRVydFdn
.....
NHfo3MomYtSoawyBFfsdfsdfasdfasdfasdfasJKJFLSJLDJKSJDVXG58e2Vn7vmY4DYHDDkBd3Y=
-----END RSA PRIVATE KEY-----
您可能带有.pem后缀的文件。Pem是您的私钥,与.pub-公钥不同,私钥始终只保留在您的计算机上,而较新的则放弃您的私钥。〜/ .ssh / id_rsa的内容可以替换为.pem文件,它可以正常工作,不需要转换。
两个或更多私钥
如果您有更多服务器,并且希望使用多个私钥进行连接,请创建〜/ .ssh / config文件,其中包含以下几行:
Host server1 server1.company.com
Hostname 12.34.56.78
User ubuntu
IdentityFile /media/11361B1123123634/server1.pem
Host server2 server2.company.com
Hostname server2.company.com
User root
IdentityFile /media/11361B1123123634/server2.pem
Host myPC myPC.local
Hostname 192.168.0.106
User mike
IdentityFile /home/mike/.ssh/id_rsa
默认情况下,ssh可以识别此文件,该文件必须命名为config完整路径:〜/ .ssh / config,并且如果您希望使用sudo(例如,稍后在cron中使用rsync),则该文件也必须可以通过/ root /访问。 .ssh / config。在上面的文件/ media / 11361B1123123634 /是我的加密USB驱动器,因此只有安装了驱动器后,上面的两个连接才有效。在主机中,名字是可以与ssh命令一起使用的简称,例如:
$ ssh server1
现在,这应该无需输入密码即可将您连接到server1.company.com,这样,rsync和其他使用ssh的命令也可以用于与其他服务器一起工作,而无需在每次通信时都提供键入或可见的密码。
如果您对权限进行了一些更改,更改了文件位置,则可能需要在客户端计算机上运行此命令 , 以摆脱 代理承认的使用密钥签名失败的问题。 错误信息。
# eval "$(ssh-agent)"
# ssh-add
客户端〜/ .ssh的权限应为dr-xr-x ---
# chmod 550 .ssh
如果将rsync与sudo一起使用,它将在/root/.ssh/config中寻找密钥文件,而不是在/home/user/.ssh/config中寻找密钥文件,因此请确保将此文件复制或链接到正确的位置,否则ssh和scp将是rsync将提示您输入密码时,工作正常。