如何使用私钥SSH到远程服务器?


77

我有两台服务器。两台服务器都在CentOS 5.6中。我想使用我拥有的私钥(OpenSSH SSH-2私钥)从Server 1到Server 2进行SSH。

我不知道如何在UNIX上做到这一点。但是我在Windows上使用Putty所做的就是将我的OpenSSH私钥提供给putty-gen并生成PPK格式的私钥。

但是,我将从服务器1创建一个bash脚本,该脚本将通过SSH在服务器2上执行一些命令。

如何使用服务器1中的私钥文件SSH到服务器2?


1
在许多Linux和Unix系统上,可以使用ssh-copy-id user@machine
Paul Tomblin

Answers:


66

您需要SSH公钥,而您将需要ssh私钥。可以使用生成密钥ssh_keygen。私钥必须保留在服务器1上,而公钥必须存储在服务器2上。

这在openssh的手册页中有完整描述,因此我将引用很多。您应该阅读“身份验证”部分。另外,openSSH手册也应该很有帮助:http : //www.openssh.org/manual.html

请注意ssh,因为这会影响服务器的安全性。

来自man ssh

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
     Contains the private key for authentication.  These files contain
     sensitive data and should be readable by the user but not acces-
     sible by others (read/write/execute).  ssh will simply ignore a
     private key file if it is accessible by others.  It is possible
     to specify a passphrase when generating the key which will be
     used to encrypt the sensitive part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Contains the public key for authentication.  These files are not
     sensitive and can (but need not) be readable by anyone.

这意味着您可以将私钥存储在.ssh的主目录中。另一种可能性是通过-i参数开关告诉ssh 使用特殊的标识文件。也来自man ssh

 -i identity_file
     Selects a file from which the identity (private key) for RSA or
     DSA authentication is read.  The default is ~/.ssh/identity for
     protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for pro-
     tocol version 2.  Identity files may also be specified on a per-
     host basis in the configuration file.  It is possible to have
     multiple -i options (and multiple identities specified in config-
     uration files).

这是专用密钥。现在,您需要在服务器2上引入您的公钥。再次引用man ssh

  ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described in the
         sshd(8) manual page.  This file is not highly sensitive, but the
         recommended permissions are read/write for the user, and not
         accessible by others.

实现此目的最简单的方法是将文件复制到Server 2并将其附加到authorized_keys文件:

scp -p your_pub_key.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

ssh守护程序必须允许通过公钥进行授权,请参见man ssh_config。通常,可以通过将以下语句添加到配置文件中来完成此操作:

PubkeyAuthentication yes

10
嗨,谢谢您的努力,但我只需要这个。ssh -i keyfile谢谢!
艾文·孟赛勒(Aivan Monceller)2011年

8
生成密钥,在服务器上安装它最简单,最推荐的方法之后是ssh-copy-idssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com
吉尔斯

5
有趣的是,每个人都忘记提及ssh-add您要在要连接的计算机上创建密钥后需要运行的情况。这就是让大多数人头痛的原因。
卢卡

3
重要说明:客户端可以有许多私钥,并可以根据其私钥〜/ .ssh / config文件中的任意名称进行选择,其中Host =提供任意名称,HostName提供名称或IP地址,Port =目标端口,用户是目标用户名,并且ItentityFile =指向私钥文件。此功能集通常被忽略,并且是许多配置问题的解决方案,例如具有多个键对,否则它们会在名称空间中发生冲突。
理查德T

1
当我尝试使用SSH与SSH连接时,$ ssh -i ~/.ssh/id_rsa myuser@ssh.myhost.com出现错误, myuser@ssh.myhost.com: Permission denied (publickey).我创建了密钥,使用本地ssh-add添加了密钥,并作为授权密钥添加到了远程服务器上。
亚伦弗兰克

21

我使用ssh和-i选项在此处添加密钥。

如果要通过.sh文件传递arg1,arg2,则只需在.sh文件之后传递它,并使用使用空间将其分开。

ssh -i home/avr/new.pem ar@231.221.54.8 "/var/www/beta/betatolive.sh mmin 30"


1
不要忘记设置正确的权限:chmod 600 home/avr/new.pem
Brian Haak

16

您需要做的第一件事是确保已运行keygen命令来生成密钥:

ssh-keygen -t rsa

然后使用此命令将密钥推送到远程服务器,对其进行修改以匹配您的服务器名称。

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'

6
让我们把ssh-copy-id user@hostname代替
安德烈·

7

id_[rd]sa.pub源计算机(从其中进行切入操作)的公钥()附加到~/.ssh/authorized_keys目标服务器的文件中,以将您要切入的用户名。如果您丢失了公共密钥,则需要使用创建一个新密钥ssh-keygen。在大多数情况下,都可以使用默认参数。如果您需要更详细的说明,可以通过Google查阅成千上万的教程。


4

ssh-copy-id-使用本地可用的密钥来授权远程计算机上的登录

ssh-copy-id在服务器1上使用,假设您拥有密钥对(由生成ssh-keygen):

ssh-copy-id -i ~/.ssh/id_rsa user@server2_hostname

现在您应该能够使用私钥通过ssh进入Server 2

ssh -i ~/.ssh/id_rsa user@server2_hostname

确实,如果您cat ~/.ssh/authorized_keys在服务器2上进行检查,则会看到为您附加了公共密钥。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.