我希望能够通过ssh登录到远程服务器而不必一直输入密码。


如何设置它?
是否需要其他命令?执行无密码会话?


评论

您正在使用openssh吗? (如果这样就很容易;))

@Rinzwind,为什么已经预装了OpenSSH的我为什么要获取专有版本?

我尽量不做假设;)

@Kevin,请澄清自己。我们谈论的是不使用密码进行ssh-ing,这通常是一个好习惯。您的意思是将其缩进root shell吗?这个问题不包括在内。

@Oxwivi:对不起,这应该是对Ravindra答案的评论,该答案是针对root登录的。

#1 楼

回答

执行以下命令:

ssh-keygen


然后您需要将新密钥复制到您的服务器:

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"


复制密钥后,按正常方式ssh进入计算机:在以下位置执行命令的特定计算机。

示例

ssh user@host


解释

这假设您已经可以成功通过SSH连接到服务器。

您需要生成一个SSH密钥对,使您无需使用密码即可识别自己。您可以根据需要选择使用密码保护密钥,但是可以将其保留为空白,以允许完全无密码的SSH访问。


首先通过运行ssh-keygen创建SSH密钥对,这将创建一个id_rsaid_rsa.pub文件。服务器上使用pub文件,私钥(id_rsa)随身携带,并以此来标识您自己。
接下来,使用ssh-copy-id user@server将公钥复制到服务器中,用远程用户和服务器替换用户与机器的DNS名称或IP地址。它会提示您输入SSH密码,然后输入密码,如果所有密码都成功完成,您将可以通过ssh user@server访问计算机,而无需输入密码。 br />https://help.ubuntu.com/community/SSH/OpenSSH/Keys


评论


@Oxwivi这个答案是更正确的方法-但似乎更长。您需要做的就是按照屏幕上的说明键入ssh-keygen,然后键入ssh-copy-id user @ server,将用户替换为远程用户,将服务器替换为远程计算机。

– Marco Ceppi♦
2011年6月4日18:36

我遇到了这个错误“代理商承认无法使用密钥签名”。遵循此步骤后,每次尝试登录时。解决方案是在本地计算机上运行“> ssh-add”,现在我可以按预期登录到远程计算机。

– jmbouffard
2011年7月5日在15:23

值得一提的是,如果您需要为@server使用自定义端口,则需要执行以下操作:ssh-copy-id“ not-marco@127.0.0.1 -p 1234”。

– s3m3n
13年4月19日在13:36



@Rinzwind:这是否意味着如果禁用passwd身份验证并仅允许密钥身份验证,则无法从未知的客户端/计算机向服务器进行身份验证。有什么方法允许使用为已知/配置的客户端生成的私钥与服务器通信而从未知计算机登录?我的意思是,此私钥是否可移植,并且可以用于在紧急情况下从其他计算机向服务器进行身份验证?

–拉贾特·古普塔(Rajat Gupta)
2014年2月28日在7:10



但是服务器仍然要求输入密码,

–张纳
18年1月24日在8:41

#2 楼

键入以下命令:



ssh-keygen

按Enter键,直到出现提示


ssh-copy-id -i root@ip_address

(它将一次询问主机系统的密码)

ssh root@ip_address

现在您应该可以不用任何密码登录。

#3 楼

我通常这样做的方式如下:

ssh-keygen -t rsa

(提示输入密码时,将其留空)

然后:
cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(这要求文件夹.ssh必须位于目标主机名的主目录中,并且其中带有authorized_keys文件)所需的用户名以及具有所需主机名或IP地址的主机名

之后,只需像以前一样通过SSH到该框即可。

评论


Rinzwind的答案中的touch和chmod命令怎么样?

– Oxwivi
2011年6月4日18:29

您需要将.ssh / authorized_keys文件更改为0600,否则将无法正常运行

– Marco Ceppi♦
2011年6月4日18:36

这确实有帮助,因为我无法使ssh-copy-id在我的服务器上为root工作。在backuppc(或任何其他守护程序)需要ssh到另一台计算机的情况下,它必须是root用户。

–亚当
16年8月27日在20:11

#4 楼

我通常使用sshpass,将其与sudo apt-get install sshpass一起安装并像这样使用

sshpass -p 'password' ssh your_username@your_server


评论


为什么不使用ssh键?

– Enzotib
2011年12月6日17:39

它不是“为什么不”的情况,它在不添加密钥的情况下仍然可以完美工作,这只是我要说的另一种方法。

–布鲁诺·佩雷拉(Bruno Pereira)
2011年12月6日在18:05

感谢您提供有关sshpass的信息,以前从未听说过。

–豹
2011年12月6日18:39

SSH密钥是该问题的“正确”答案,但是在无法更改远程服务器上的身份验证方法的情况下,sshpass是一个非常有用的技巧!

–雅各布·克拉尔(Jacob Krall)
2014年3月14日15:27

这非常危险,您将保留在bash_history或要连接到的主机的任何普通密码中。

– kappa
15年7月22日在12:48

#5 楼


禁用密码身份验证

因为许多使用SSH服务器的人使用弱密码,所以许多
在线攻击者会寻找SSH服务器,然后开始猜测
密码随机。攻击者可以在一个小时内尝试使用成千上万个密码,并在足够的时间内猜测最强的密码。推荐的解决方案是使用SSH密钥而不是密码。要像普通的SSH密钥一样难以猜测,密码必须包含634个随机字母和数字。如果始终可以使用SSH密钥登录到计算机,则应该完全禁用密码身份验证。

如果禁用密码身份验证,则只会可以
从您特别认可的计算机上进行连接。这大大提高了安全性,但是却使您无法在没有事先批准PC的情况下从朋友的PC连接到自己的计算机,或者在意外删除时从自己的笔记本电脑连接到
您的密钥。

建议禁用密码身份验证,除非您有特定的原因不这样做。

要禁用密码身份验证,请在br /> sshd_config文件:

#PasswordAuthentication yes


用如下所示的一行替换它:

PasswordAuthentication no


>保存文件并重新启动SSH服务器后,
登录时甚至都不要求输入密码。


https:// help。 ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication

评论


这是最基本的正确答案,但对安全性有好处!另外禁用root登录是另一个好习惯

– FreeSoftwareServers
15年12月21日在19:15

PasswordAuthentication是否不影响所有用户?如果没有,如何在普通用户中关闭它,而在测试时却保持root用户不变?我真的不想愚弄它并把自己完全锁在外面。

–亚当
17年9月17日在16:13

保持ssh会话为打开状态,以便您可以将其改回。您要禁用密码和root。是的,您可以对它进行修改。别 ;)

– Thufir
17年9月17日在18:04

在ssh期间,我遇到一个错误,权限被拒绝(公钥)。使用密码验证号我该怎么办?我是否可以在另一台主机上更改PasswordAuthentication no?

–巴黎
18年5月10日在7:22

#6 楼

该解决方案特别适合使用Windows的用户SSH到其远程计算机中,包括AWS Cloud和GCE Cloud上的云映像。
使用的工具:


puttygen puttygen下载


winscp winscp下载


<
执行步骤:

使用puttygen生成公钥/私钥对。
将公钥上传到云或远程位置的服务器。

如何做到:
1。生成密钥/对或使用现有的私有密钥
如果拥有私有密钥:
打开puttygen,按“加载”按钮,然后选择您的私有密钥(*.pem)文件。您没有私钥:

打开puttygen
在“参数”部分中选择所需的密钥类型SSH2 DSA(您可以使用RSA或DSA)。重要的是,请将密码短语字段留空。
按generate,然后按照说明生成(公共/私有)密钥对。


1,链接如下)
2。创建一个新的“ authorized_keys”文件(带有notepad
从PuTTY密钥生成器的“要粘贴到OpenSSH的Open_authorized_keys文件的公共密钥”部分复制您的公共密钥数据,然后将密钥数据粘贴到authorized_keys文件。 br />
确保此文件中只有一行文本。

3。将密钥上传到Linux服务器

打开WinSCP,
选择SFTP文件协议并使用ssh凭据登录。
成功后,您将在远程计算机上看到主目录结构。


将authorized_keys文件上传到远程计算机上的主目录。

4。设置适当的权限
创建.ssh目录(如果不存在)

authorized_keys文件复制到.ssh目录中。 br />如果文件已存在,只需将此文件的内容添加到现有文件中即可。

运行命令以设置权限:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

现在,您无需输入输入即可将authorized_keys导入远程计算机。每次都具有凭据。
进一步阅读:


在Windows下生成和上传SSH密钥


OpsenSSH密钥证书认证PEM PUB CRT



#7 楼

如果您创建公共/专用密钥对并使用我们新创建的公共密钥登录,则无需输入密码。根据密钥环和/或ssh代理的配置,您可能需要使用密码保护密钥。

这是为您提供的许多简短说明之一。对于这种方法的安全至关重要,生成的私钥保持私密!您绝不应该与任何人共享它或允许其以任何身份访问它。 >在~/.ssh/中,您会找到您的公共密钥,即~/.ssh/。通过使用可移动介质(笔驱动器)传输或通过在服务器上短暂启用密码身份验证,然后使用id_rsa.pub然后再次禁用它,应将其内容附加到服务器authorized_keys文件中。选择使用密码短语来保护您的密钥(在第一步中),您可以使用ssh-copy-id ~/.ssh/id_rsa.pub username@server或Ubuntu密钥环在本地保护该密码,因此您不必一直输入。

#8 楼

要添加一些内容:



Mac默认不具有ssh-copy-id,您必须自己安装:

curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
chmod +x /usr/local/bin/ssh-copy-id



在此处找到更多:https://github.com/beautifulcode/ssh-copy-id-for-OSX



如果您已经进行了端口转发,命令应如下所示:

#9 楼

无需输入密码即可进行远程登录/复制

分别用于远程登录和远程复制的应用程序sshscp允许您在不提供密码的情况下与远程主机通信。这要求您遵循以下说明的身份验证过程。 “客户端”是指您要坐在的计算机,而“服务器”是指您要在不提供密码的情况下登录的计算机。身份验证过程的步骤为:


运行ssh-keygen生成私钥和公用密钥,除非您的计算机上已完成此操作。它们存储在$HOME/.ssh中的文件中。
将公用密钥文件的内容追加到服务器上的文件$HOME/.ssh/authorized_keys$HOME/.ssh/authorized_keys2

有三种不同类型的身份验证协议。您在运行ssh-keygen时指定类型:



SSH协议版本1,RSA1:这是默认选择,并导致文件标识(私钥,应采用chmod 0700以确保该文件对其他人不可读)和identity.pub(公共密钥)。

SSH协议版本1,RSA:通过运行ssh-keygen -t rsa获得,并生成文件id_rsa(私有密钥)和id_rsa.pub(公钥)

SSH协议版本1,DSA:通过运行ssh-keygen -t dsa获得,并生成文件id_dsa(私钥)和id_dsa.pub(公钥)

运行ssh-keygen时,您可以依靠默认答案(这意味着您不提供密码短语)。这样可以简化整个设置,但又不安全。

您可以为ssh选项指定要使用的密钥类型。 ssh -1强制使用RSA1密钥(协议版本1),而ssh -2强制ssh仅尝试使用RSA或DSA密钥(协议版本2)。在下面的示例中,我们将在远程主机上生成并安装RSA1和DSA密钥,以便您具有更大的灵活性。您可以使用以下行在您的.ssh目录中创建配置文件:

Protocol 1,2


这使ssh在RSA / DSA(协议版本2)之前尝试RSA1(协议版本1)连接。

使用RSA1密钥

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"


使用DSA密钥

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"


如果您在生成密钥时未使用密码短语,则只需要做这些。您可以通过运行ssh $ remote来测试连接,并查看是否可以在不输入密码的情况下登录(可能需要使用-1-2作为ssh的选项)。当然,可以对要登录的任何计算机重复该过程。

如果确实使用了密码,则必须运行程序ssh-agent来启动特殊的shell,然后运行ssh-add使用sshd注册您的密钥/密码组合。有关更多信息,请参见这些程序的手册页。

用于自动执行无密码连接的脚本:复制自:http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html

#10 楼

我想为可能会发现他们应该在这里阅读所有答案的人输入密码的原因添加答案,因为您将IdentitiesOnly设置为yes。而且这里的答案可以节省您很多时间来管理多个密钥,这些密钥是git或服务器的密钥。

生成密钥并将其复制到服务器后:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160


我发现它不起作用。

然后我去检查了客户端上的~/.ssh/config文件,在底部看到了它:

Host *
IdentitiesOnly yes


我只需输入ssh somename即可登录。将上述四行之类的设置添加到配置文件中。

主机是您稍后连接服务器时要输入的名称; HostName是服务器的IP;用户是您登录服务器的用户名;身份文件是存储已生成密钥的文件。