use*_*686 185
如果您碰巧使用 GNOME,seahorse应用程序(“密码和加密密钥”)可以为您完成:File -> New -> Secure Shell Key。
如果您更喜欢终端,请运行以生成密钥对。有效的密钥对类型是:ssh-keygen -t <type>
该程序将要求您输入密码和保存新密钥的位置。建议使用建议的默认路径,因为所有其他工具都会在那里寻找它。
同样,seahorse通常可以为您执行此操作 - 在我的个人密钥中,右键单击您的 SSH 密钥并选择为安全外壳配置密钥。
或者,ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
在终端中。
或者,完全手动逐步:
.ssh
在远程主机上的远程用户的主目录中创建一个目录(如果它不存在)。authorized_keys
(如果它不存在)的文件。umask
比平时更自由,请将文件设为不可组写:chmod go-w ~/.ssh ~/.ssh/authorized_keys
.~/.ssh/id_rsa.pub
)的内容复制(附加)到远程~/.ssh/authorized_keys
文件中。如果您将私钥加载到 ssh代理中,它将在内存中保存解密的密钥。我们希望这样可以避免在我们 shell 进入服务器时重新输入密码。
首先,必须启动代理或将启动的通信套接字的路径加载到变量中。在终端上运行ssh-agent将生成用于分配和设置代理变量的命令。这些命令可以保存在一个文件中,以便在不同的终端中使用。或者,可以运行这些命令而忘记在另一个终端中重新使用相同的代理。例如:eval $(ssh-agent)
。
加载密钥很简单,只需执行ssh-add
并提供密码短语即可。
如果您使用 GNOME,gnome-keyring-daemon通常提供与 ssh-agent 相同的 SSH 代理功能,因此您不需要启动任何东西。GNOME 也会在登录时自动加载和解锁密钥。
如果一切都正确完成,使用不会提示您输入密码。如果代理有问题而不是密钥有问题,您将被要求输入密钥的密码短语,而不是用户帐户的密码。ssh user@server
当在代理中加载正确的密钥时,任何使用 ssh 进行通信的内容都可以在不输入用户帐户密码的情况下工作。scp、sftp和rsync等程序利用了这一点。
id_dsa
代替id_rsa
,ECDSA 将有id_ecdsa
.authorized_keys2
- 但你真的不太可能找到任何早于 5.0 的服务器正在使用中。lsh
、ssh.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-agent > ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent
fre*_*eit 23
你没有指定你在什么 Unix 上,你连接到什么 Unix,你正在使用什么 shell,你正在使用什么 SSH 变体等等。所以其中一些可能需要稍微调整;这是基于相当新的 OpenSSH 版本,它用于许多 unix 变体。
这一切都来自您的本地桌面系统。
ssh-keygen
Run Code Online (Sandbox Code Playgroud)
确保使用默认键名。我建议你不要设置在该键的密码,否则这是一个安全问题。“-t rsa”不是一个坏主意,但可能不需要。
ssh-copy-id username@server
Run Code Online (Sandbox Code Playgroud)
这将询问您用于登录的密码,并为您设置authorized_keys 内容。(无需手动完成)
然后,这个:
`ssh-agent`
Run Code Online (Sandbox Code Playgroud)
或者这个:
exec ssh-agent sh
Run Code Online (Sandbox Code Playgroud)
或者:
exec ssh-agent bash
Run Code Online (Sandbox Code Playgroud)
这将启动一个可以保存您的密钥的 SSH 代理。在许多现代 Unix 变体上,如果您以图形方式登录,这已经发生了。第一个变体(带反引号)将 ssh-agent 置于后台并设置环境变量以与之对话。后两个让代理为您运行一个 shell,这样当您退出 shell 时,代理就会退出。
许多现代 Unix 变体已经为您运行了一个代理,特别是如果您以图形方式登录。你可以试试“ ps aux | grep ssh-agent
”或“ ps -ef | grep ssh-agent
”;如果某些东西已经在运行,请使用它。
然后,最后:
ssh-add
Run Code Online (Sandbox Code Playgroud)
它会要求输入密码;给它你给 ssh-keygen 的那个。还有一些方法可以让它以图形方式询问。您可以将 ssh-agent 和 ssh-add 内容放入您的登录脚本(设置因您使用的外壳而异)以自动执行此操作,但某些 Unix 变体(例如当前的 Ubuntu Linux)会自动执行大部分操作,因此您真正需要做的就是创建一个密钥并使用 ssh-copy-id 在远程主机上设置它。
现在,“ ssh username@server
”应该可以在不要求任何身份验证的情况下工作。在幕后,它使用 ssh-agent 持有的密钥,并要求代理为它执行魔术签名技巧。
スーパ*_*ミコン 13
也可以在 Windows上的PuTTY 中执行此操作。
一旦您设置好公钥/私钥对(如此处的其他答案所示),运行 PuttyGen。在那里,加载您已经设置的现有私钥,然后将其保存为 PuTTY 私钥 (ppk)。
然后在 PuTTY 中,只需单击要自动登录的已保存会话并单击加载。从这里进入左侧窗格中的连接 -> 数据,然后在“自动登录用户名”中输入该远程服务器的用户名:
之后进入 Connection -> SSH -> Auth,并浏览你在 PuttyGen 中创建的 ppk:
然后返回会话页面并保存您之前加载的会话。
除了已经介绍的如何设置 ssh 密钥之外,我还建议使用Keychain作为ssh 代理控制台前端,它允许您为每个系统进程而不是每次登录处理一个密钥。
我知道已经有 GNOME 和 KDE 工具可以做同样的事情,但是如果您是控制台迷,那么这很棒(并且可以在大多数 Unix 系统上使用)。
要使用它,只需将以下内容附加到您的~/.bashrc
(与其他 shell 类似):
if type keychain >/dev/null 2>/dev/null; then
keychain --nogui -q <all your SSH/PGP keys>
[ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
[ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
Run Code Online (Sandbox Code Playgroud)
根据ServerFault上的一个非常类似的问题,我建议使用ssh-copy-id,它会执行为您设置身份验证密钥所涉及的所有步骤:
ssh-copy-id 是一个使用 ssh 登录远程计算机的脚本(大概使用登录密码,因此应该启用密码身份验证,除非您巧妙地使用了多个身份)
它还会更改远程用户的 home、~/.ssh 和 ~/.ssh/authorized_keys 的权限,以删除组可写性(如果远程 sshd 在其配置中设置了 StrictModes,这将阻止您登录)。
如果给出 -i 选项,则使用身份文件(默认为 ~/.ssh/identity.pub),无论 ssh-agent 中是否有任何密钥。
您需要做的只是这样:
ssh-copy-id user@host
Run Code Online (Sandbox Code Playgroud)
输入一次密码,就可以开始了!
归档时间: |
|
查看次数: |
171993 次 |
最近记录: |