2009-07-18 16:51:50 +0000 2009-07-18 16:51:50 +0000
155
155

如何设置SSH,使我不需要输入密码?

如何设置SSH,使我在连接到主机时不必输入密码?

答案 (10)

167
167
167
2009-07-18 17:36:45 +0000

生成SSH密钥 (如果你没有的话)

如果你碰巧使用GNOME,seahorse应用程序(“密码和加密密钥”)可以帮你完成。File -> New -> Secure Shell Key.

如果你喜欢终端机,运行ssh-keygen -t <type>来生成密钥对,有效的密钥对类型有:File ->New ->Secure Shell Key。有效的密钥对类型有

  • rsa: 默认的
  • dsa: 或多或少的等价物,除了限制在1024位的密钥
  • ecdsa: 同样的安全性,但密钥较小,但相对较新,在SSH软件中有些罕见。
  • ed25519:安全性高(对侧信道攻击和弱随机数生成器有较强的抗性)。签名生成速度非常快。很新。只有在 OpenSSH >= 6.5

程序会要求你提供一个passphrase和一个保存新密钥的位置。建议使用建议的默认路径,因为所有其他工具都会在那里寻找它。

将公钥上传到远程服务器

同样,seahorse可以为你做这些 - 在我的个人密钥中,右键点击你的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-agent会产生用于分配和设置代理变量的命令。这些命令可以保存在一个文件中,以便在不同的终端上使用。另外,也可以运行这些命令,忘记在另一个终端上重新使用同一个代理,例如:eval $(ssh-agent).

加载密钥很简单,只需执行ssh-add并给它传递短语即可。

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

不需要密码就能shell进远程服务器

如果一切都做得很正确,使用ssh user@server就不会提示你输入密码。如果代理出了问题,而不是密钥出了问题,你会被要求输入密钥的密码短语,而不是用户账户的密码。

凡是使用ssh进行通信的程序,在代理中加载了正确的密钥后,就可以不用输入用户账号密码了。诸如scpsftprsync等程序就是利用了这一点。


注。

  • 你只需要一个SSHv2密钥,因为SSHv1非常不安全,现在已经不用了。
  • 你也只需要一种类型的密钥 - RSA或DSA就够了。ed25519和ECDSA都是最新的,因此不是所有地方都支持)。
  • 所有这些步骤对于RSA和DSA密钥都是一样的。如果你使用DSA,使用id_dsa而不是id_rsa,ECDSA会有id_ecdsa
  • 比3.0更老的OpenSSH服务器使用authorized_keys2 - 但你真的不太可能找到任何比5.0更老的服务器在使用。
  • 这些说明只适用于OpenSSH 3.0及更新的版本。lshssh.com以及其他(Unix和非)SSH服务器不包含在本教程中。

示例。

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

  • 保存代理变量以便重复使用 (详细的例子) ssh-agent \> ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent

22
22
22
2009-07-18 17:28:34 +0000

你没有说明你在什么Unix上,你连接的是什么Unix,你使用的是什么shell,你使用的是什么SSH变体,等等。所以有些地方可能需要稍作调整;这是基于OpenSSH的最新版本,它在很多Unix变种上使用。

这都是来自你的本地桌面系统。

ssh-keygen

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

ssh-copy-id username@server

这将会要求你输入登录时使用的密码,并为你设置授权/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持有的密钥,并要求代理为它做神奇的签名技巧。

11
11
11
2009-07-25 03:42:47 +0000

在Windows上也可以在 PuTTY 中这样做。

一旦你设置好了公钥/私钥对(如其他答案所示),运行PuttyGen,在那里,加载你已经设置好的现有私钥,然后将其保存为PuTTY私钥(ppk)。

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

然后进入连接 -> SSH -> Auth, 浏览你在PuttyGen中做的ppk:

然后回到会话页面,保存你之前加载的会话。

3
3
3
2009-07-18 17:39:21 +0000

ServerFault 的一个非常类似的问题来看,我建议使用 ssh-copy-id ,它可以为你完成设置认证密钥的所有步骤。

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

它还改变了远程用户的主页 ~/. ssh, 和 ~/.ssh/authorized/keys 的权限来移除组的可写性 (如果远程 sshd 在配置中设置了 StrictModes,那么这将阻止你登录)。

如果给出了 -i 选项,那么就会使用身份文件 (默认为 ~/.ssh/identity.pub),而不管你的 ssh-agent 中是否有密钥。

你所需要做的就是简单的。

ssh-copy-id user@host

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

3
3
3
2009-07-18 17:57:35 +0000

除了已经告诉你如何设置ssh密钥之外,我推荐 Keychain 作为一个ssh-agent控制台的前端,它允许你在每个系统进程中处理一个密钥,而不是每次登录。

我知道已经有GNOME和KDE工具可以做同样的事情了,但是如果你是console junkie类型的人,这是很好的(并且可以在大多数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
```。
2
2
2
2013-02-01 16:58:45 +0000

我写了这个非常非常短的教程,因为我对非常非常长的教程感到非常沮丧,因为它真的很简单:)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub
2
2
2
2009-07-18 16:55:59 +0000

http://linuxproblem.org/art/_9.html

你的目标

你想使用Linux和OpenSSH来自动化你的任务。因此你需要从主机A/用户a自动登录到主机B/用户b。你不想输入任何密码,因为你想在shell脚本中调用ssh。

2
2
2
2012-12-02 23:11:47 +0000

Putty有一个 -pw 选项,可以让你在桌面上创建一个快捷方式,比如这样。

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password
1
1
1
2009-07-18 17:06:33 +0000
  1. 在连接的主机上,运行ssh-keygen。(如果它告诉你必须指定一个类型,则执行ssh-keygen -t rsa。)当它要求你输入文件位置时,采用默认值。当它要求你输入密码时,按回车键表示没有密码。
  2. cat ~/.ssh/id_rsa.pub (或者不管ssh-keygen中的默认文件位置是什么,尽管你必须有一个非常老的ssh安装,它才会不同); 复制输出到你的剪贴板。
  3. 以你要连接的账号正常登录目标主机。编辑文件~/.ssh/authorized_keys(如果~/.ssh不存在,slogin到某个地方;这是简单易行的方法,可以用正确的权限创建它)。将你的剪贴板(包含其他主机的id_rsa.pub)粘贴到这个文件中。
0
0
0
2012-10-25 12:27:48 +0000

如果你想在 Linux 的终端上完成这一切:

在主机上

cd ~/.ssh/

ssh-keygen -t {rsa|dsa} -b {1024|2048|4096}。-C “如果你想要一些注释文本” -f id_ArbitraryName

{}中的项目是选项,使用rsa或dsa,并选择位数大小(越大越安全)

然后你需要给authorizedkeys和authorizedkeys2文件添加权限。

cat idArbitraryName.pub \>> 授权keys

cat idAribtraryName.pub \>> 授权keys2

然后将 id_AribtraryName 文件下载到你想ssh的盒子里。如果连接的盒子是基于unix的,可能需要一个配置文件(在putty中,上面有人介绍过)。

在连接盒上

在配置文件中 - vim ~/.ssh/config

Host example.host.com # 或你的计算机名

User username

IdentityFile ~/.ssh/id_ArbitraryName

配置文件需要600的权限。SSh文件夹需要700的权限。

希望对你遇到经常省略的配置问题有帮助。