如何设置无密码SSH登录?

Oxw*_*ivi 292 ssh authentication

我希望能够通过 ssh 登录远程,而无需一直输入密码。

  • 我该如何设置?
  • 执行无密码会话是否需要不同的命令?

Rin*_*ind 311

回答

执行此命令:

ssh-keygen
Run Code Online (Sandbox Code Playgroud)

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

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"
Run Code Online (Sandbox Code Playgroud)

复制密钥后,正常ssh进入机器:

ssh user@host
Run Code Online (Sandbox Code Playgroud)

您现在可以在不输入密码的情况下从您执行命令的特定机器登录。

例子

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
Run Code Online (Sandbox Code Playgroud)

解释

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

您需要生成一个 SSH 密钥对,它允许您在不使用密码的情况下识别您的身份。如果您愿意,您可以选择使用密码保护密钥,但这可以留空,允许完全无密码的 SSH 访问。

  1. 首先通过运行来创建您的 SSH 密钥对,ssh-keygen这将创建一个id_rsaid_rsa.pub文件。这pub文件是服务器上的内容,私钥 ( id_rsa) 是您随身携带的东西,也是您识别自己的方式。
  2. 接下来将公钥复制到您的服务器,ssh-copy-id user@server将用户替换为远程用户,将服务器替换为机器 DNS 名称或 IP 地址。它会提示您输入 SSH 密码,输入密码,如果一切成功,您就可以通过以下方式访问机器ssh user@server不需要密码的情况下。

参考

  • @Oxwivi 这个答案是更正确的方法 - 但它似乎更长。您需要做的就是按照屏幕上的说明输入`ssh-keygen`,然后输入`ssh-copy-id user@server` 用远程用户替换用户,用远程机器替换服务器 (13认同)
  • 但是服务器还是要求输入密码,,, (7认同)
  • 我有这个错误“代理承认未能使用密钥签名。” 每次按照此步骤尝试登录时。解决方案是在本地机器上运行“> ssh-add”,现在我可以按预期登录到远程机器。 (3认同)
  • 值得一提的是,如果你需要为@server 使用自定义端口,你需要这样做:`ssh-copy-id "not-marco@127.0.0.1 -p 1234"`。 (2认同)

小智 40

键入以下命令:

  1. ssh-keygen

    按下Enter键,直到你得到的提示

  2. ssh-copy-id -i root@ip_address

    (它会询问主机系统的密码)

  3. ssh root@ip_address

现在您应该无需任何密码即可登录。


小智 27

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

ssh-keygen -t rsa

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

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

(这要求文件夹 .ssh 位于目标主机名的主目录中,其中包含 authorized_keys 文件)

当然,将 username 替换为所需的用户名,将 hostname 替换为所需的主机名或 IP 地址

之后,就像你习惯的那样,通过 SSH 连接到那个盒子。

  • 您需要将 `.ssh/authorized_keys` 文件修改为 0600 否则这将不起作用 (7认同)

Bru*_*ira 19

我通常使用sshpass它,安装它sudo apt-get install sshpass并像这样使用它

sshpass -p 'password' ssh your_username@your_server
Run Code Online (Sandbox Code Playgroud)

  • 这是非常危险的,您将保留在 bash_history 或任何您要连接的主机的普通密码中。 (10认同)
  • SSH 密钥是该问题的“正确”答案,但是在您无法更改远程服务器上的身份验证方法的情况下,`sshpass` 是一个非常有用的技巧! (8认同)
  • 为什么不使用 ssh 密钥? (6认同)

Thu*_*fir 11

禁用密码验证

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

如果您禁用密码验证,则只能从您特别批准的计算机进行连接。这极大地提高了您的安全性,但使您无法在没有预先批准 PC 的情况下从朋友的 PC 连接到您自己的计算机,或者在您不小心删除密钥时从您自己的笔记本电脑连接到自己的计算机。

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

要禁用密码身份验证,请在 sshd_config 文件中查找以下行:

#PasswordAuthentication yes
Run Code Online (Sandbox Code Playgroud)

用如下所示的行替换它:

PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这是最基本的正确答案,但有利于安全!也禁用 root 登录是另一个好方法 (2认同)

小智 9

该解决方案是专门为使用用户的WindowsSSH到他们的远程机器包括云图AWS云GCE云

免责声明

最近使用这个解决方案在 GCE 上远程登录新部署的 vm 映像。


使用的工具:

  1. puttygen 腻子下载
  2. winscp winscp下载

执行步骤:

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

怎么做:

1. 生成一个密钥/对或使用现有的私钥

如果您拥有私钥:

打开puttygen,按加载按钮并选择您的私钥 ( *.pem) 文件。


如果您没有私钥:

  • 打开puttygen,
  • 参数部分选择所需的密钥类型 SSH2 DSA(您可以使用 RSA 或 DSA)。将密码字段留空很重要。
  • generate并按照说明生成(公钥/私钥)密钥对。

示例密钥生成图片

(来自来源 1,下面给出的链接)

2. 创建一个新的 'authorized_keys' 文件(带有notepad

从 PuTTY 密钥生成器的“用于粘贴到 OpenSSH 授权密钥文件的公钥”部分复制您的公钥数据,并将密钥数据粘贴到authorized_keys文件中。


确保此文件中只有一行文本。


3.上传密钥到Linux服务器

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

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


4.设置适当的权限

制作.ssh目录(如果不存在)


authorized_keys文件复制到.ssh目录。
(这将替换任何现有authorized_keys文件,请注意这一点)。

如果文件存在,只需将此文件的内容添加到现有文件中。


运行命令设置权限:

sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

现在,您ssh无需每次都输入凭据即可进入远程机器。

进一步阅读:


con*_*use 5

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

这是为您准备的众多简短操作指南之一。对于这种方法的安全性至关重要,生成的私钥仍然是私有的!您永远不应该与任何人共享它或允许以任何身份访问它。

此命令在 中生成一个相当强的密钥~/.ssh/

ssh-keygen -b 4096
Run Code Online (Sandbox Code Playgroud)

~/.ssh/你会发现你的公钥为id_rsa.pub. 它的内容应该authorized_keys通过可移动媒体(笔式驱动器)传输或通过在服务器上短暂启用密码验证,然后使用ssh-copy-id ~/.ssh/id_rsa.pub username@server然后再次禁用它来附加到您的服务器文件。

如果您选择使用密码保护您的密钥(在第一步中),您可以使用ssh-agent或 Ubuntu 密钥环在本地保护该密码,这样您就不必一直输入它。