如何设置 SSH 以便不需要输入密码?

如何设置 SSH 以便不需要输入密码?

如何设置 SSH 以便在连接主机时不必输入密码?

答案1

生成 SSH 密钥(如果您没有)

如果你碰巧使用 GNOME,海马应用程序(“密码和加密密钥”)可以为您完成此操作:文件->新的->安全外壳密钥

如果您更喜欢终端,请运行以生成密钥对。有效的密钥对类型为:ssh-keygen -t <type>

  • rsa:默认
  • dsa:大致相同,但密钥限制为 1024 位
  • ecdsa:具有相同的安全性,但密钥较小,但在 SSH 软件中相对较新且比较少见。
  • ed25519:安全性高(更能抵抗侧信道攻击和弱随机数生成器)。签名生成速度非常快。非常新。仅在OpenSSH >= 6.5

该程序将要求您提供密码以及保存新密钥的位置。建议使用建议的默认路径,因为所有其他工具都会在那里查找它。

将公钥上传到远程服务器

再次,海马可以经常为你做到这一点我的个人钥匙,右键单击您的 SSH 密钥并选择配置安全外壳的密钥

或者,ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host在终端。

或者,完全手动逐步进行:

  1. .ssh在远程主机上,创建一个以远程用户的主目录命名的目录(如果该目录尚不存在) 。
  2. authorized_keys在该目录中,创建一个名为(如果它尚不存在)的文件。
  3. 如果您的远程umask比平常更自由,请使该文件不可组写:chmod go-w ~/.ssh ~/.ssh/authorized_keys
  4. 最后,以某种方式复制(附加)本地的内容公钥~/.ssh/id_rsa.pub)进入远程~/.ssh/authorized_keys文件。

将密钥加载到 ssh 代理中

如果你将私钥加载到 ssh代理人,它将把解密的密钥保存在内存中。我们希望这样可以避免每次进入服务器时都重新输入密码。

首先,必须启动代理或将已启动的通信套接字的路径加载到变量中。运行ssh 代理在终端上将生成用于分配和设置代理变量的命令。这些命令可以保存在文件中以供在不同终端中使用。或者,可以运行这些命令,而不必在另一个终端中重复使用同一个代理。例如:eval $(ssh-agent)

加载密钥很简单,只需执行ssh-add并输入密码即可。

如果你正在使用 GNOME,gnome-keyring-守护进程通常提供与 ssh-agent 相同的 SSH 代理功能,因此您不需要启动任何东西。GNOME 也会在登录时自动加载和解锁密钥。

无需密码即可进入远程服务器

如果所有操作都正确,使用将不会提示您输入密码。如果代理有问题而不是密钥有问题,您将被要求输入密钥的密码,而不是用户帐户的密码。ssh user@server

只要在代理中加载了正确的密钥,使用 ssh 进行通信的任何程序都可以工作,而无需输入用户帐户密码。以下程序SCP安全FTP同步利用这个。


笔记:

  • 您只需要一个 SSHv2 密钥,因为 SSHv1 非常不安全并且现在已不再使用。
  • 您也只需要一种类型的密钥 - RSA 或 DSA 就足够了。(ed25519 和 ECDSA 都是最新的,因此并非所有地方都支持)。
  • 对于 RSA 和 DSA 密钥,所有这些步骤都是相同的。如果您使用 DSA,请使用id_dsa而不是id_rsa,ECDSA 将具有id_ecdsa
  • 使用的 OpenSSH 服务器版本早于 3.0 authorized_keys2- 但您不太可能发现正在使用的 5.0 之前的版本。
  • 这些说明仅适用于 OpenSSH 3.0 及更新版本。lshssh.com教程不包含、和其他(Unix 和非Unix)SSH 服务器。

例子:

  • 将公钥复制到远程主机:

    ssh-copy-id -i ~/.ssh/id_rsa.pub myaccount@remotehost # 这个
    
    cat ~/.ssh/id_rsa.pub | ssh myaccount@remotehost \
          'mkdir -p ~/.ssh ; cat >> ~/.ssh/authorized_keys' # 或者这样
    
  • 保存代理变量以供重复使用(详细示例)
    ssh 代理 > ~/.ssh/跨终端代理
    .~/.ssh/跨终端代理
    

答案2

您没有指定您使用的是哪种 Unix、您正在连接到哪种 Unix、您正在使用哪种 shell、您正在使用哪种 SSH 变体等等。因此,其中一些可能需要稍作调整;这是基于相当新的 OpenSSH 版本,它在许多 unix 变体上使用。

这一切都来自您的本地桌面系统。

ssh-keygen

确保使用默认的键名。我建议你在该密钥上设置密码,否则会出现安全问题。“-t rsa”不是一个坏主意,但可能不需要。

ssh-copy-id username@server

它将要求您输入用于登录的密码,并为您设置authorized_keys。(无需手动执行)

然后,这个:

`ssh-agent`

或者可能是这样:

exec ssh-agent sh

或者:

exec ssh-agent bash

这将启动一个可以保存密钥的 SSH 代理。在许多现代 Unix 变体中,如果您以图形方式登录,则此操作已完成。第一个变体(带反引号)将 ssh-agent 放入后台并设置环境变量以与其通信。后两个变体让代理为您运行 shell,这样当您退出 shell 时,代理也会退出。

许多现代 Unix 变体已经为您运行了代理,特别是如果您以图形方式登录。您可以尝试“ ps aux | grep ssh-agent”或“ ps -ef | grep ssh-agent”;如果某个代理已在运行,请使用它。

最后:

ssh-add

它会要求输入密码;输入您提供给 ssh-keygen 的密码。还有方法让它以图形方式询问。您可以将 ssh-agent 和 ssh-add 内容放入登录脚本(设置因您使用的 shell 而异)以自动执行此操作,但某些 Unix 变体(例如当前的 Ubuntu Linux)会自动执行大部分操作,因此您真正需要做的就是创建一个密钥并使用 ssh-copy-id 在远程主机上进行设置。

现在,“ ssh username@server” 应该可以正常工作,无需任何身份验证。在后台,它使用 ssh-agent 持有的密钥,并要求代理为其执行神奇的签名技巧。

答案3

可以在油灰在 Windows 上也是如此。

设置好公钥/私钥对后(如此处其他答案所示),运行 PuttyGen。在其中,加载已设置的现有私钥,然后将其保存为 PuTTY 私钥 (ppk)。

然后在 PuTTY 中,只需单击要自动登录的已保存会话,然后单击“加载”。从这里进入左侧窗格中的“连接”->“数据”,然后在“自动登录用户名”中输入该远程服务器的用户名:

PuTTY 用户名输入

之后进入连接 -> SSH -> Auth,并浏览您在 PuttyGen 中制作的 ppk:

PuTTY 私钥输入

然后返回会话页面并保存您之前加载的会话。

答案4

来自一个非常相似的问题服务器故障,我建议使用ssh-复制-id,它将为您完成设置身份验证密钥所涉及的所有步骤:

ssh-copy-id 是一个使用 ssh 登录远程机器的脚本(大概使用登录密码,因此应该启用密码验证,除非你巧妙地使用了多重身份)

它还会更改远程用户的主目录、~/.ssh 和 ~/.ssh/authorized_keys 的权限以删除组可写性(如果远程 sshd 在其配置中设置了 StrictModes,则会阻止您登录)。

如果给出了 -i 选项,则使用身份文件(默认为 ~/.ssh/identity.pub),不管您的 ssh-agent 中是否有任何密钥。

您需要做的只是这样做:

ssh-copy-id user@host

输入一次密码,就可以开始了!

相关内容