Howto Linux/UNIX使用DSA公共密钥身份验证(无密码登录)设置SSH
问题:如何通过DSA公钥身份验证设置SSH?
我有一个名为tom的Linux笔记本电脑和一个名为jerry的远程Linux服务器。
如何设置基于DSA的身份验证,因此不必执行密码?
答:DSA公钥认证只能在每个系统/用户的基础上建立,即,它不是系统范围的。
您将在两台计算机上为SSH版本2设置具有DSA公钥身份验证的ssh:
#1机器:您的笔记本电脑叫tom#2机器:您的远程服务器叫jerry
在笔记本电脑/台式机(本地计算机)上执行命令
首先登录名为tom的本地计算机,然后执行以下命令。
步骤1:生成DSA密钥对
使用ssh-keygen命令,如下所示:
$ ssh-keygen -t dsa
输出:
Enter file in which to save the key (/home/Hyman/.ssh/id_dsa): Press [Enter] key Enter passphrase (empty for no passphrase): myPassword Enter same passphrase again: myPassword Your identification has been saved in /home/Hyman/.ssh/id_dsa. Your public key has been saved in /home/Hyman/.ssh/id_dsa.pub. The key fingerprint is: 04:be:15:ca:1d:0a:1e:e2:a7:e5:de:98:4f:b1:a6:01 Hyman@Hyman-desktop
注意:
a)请输入与您的帐户密码不同的密码,并进行确认。
b)公钥被写入/home/you/.ssh/id_dsa.pub。
c)私钥被写入/home/you/.ssh/id_dsa。
d)永不放弃您的私钥很重要。
步骤2:设置目录权限
接下来,确保您对.ssh目录具有正确的权限:
$ cd $ chmod 755 .ssh
步骤3:复制公钥
现在,将计算机#1(tom)上的文件~/.ssh/id_dsa.pub复制为~/.ssh/authorized_keys到远程服务器jerry:
$ scp ~/.ssh/id_dsa.pub user@jerry:.ssh/authorized_keys
在名为jerry的远程服务器上执行的命令
登录到您的远程服务器,并确保权限设置正确:
$ chmod 600 ~/.ssh/authorized_keys
如何使用DSA密钥从客户端登录到服务器?
在本地计算机上按以下方式使用scp或者ssh:
$ ssh user@jerry $ ssh [email protected] $ scp file user@jerry:/tmp
每次您连接到名为jerry的远程服务器时,仍然会要求您提供DSA密钥文件的密码,除非您在生成DSA密钥对时未输入密码。
如何使用DSA密钥从客户端登录到服务器,但不执行密码,即无密码登录?
在shell提示符下执行以下命令:
$ exec /usr/bin/ssh-agent $SHELL $ ssh-add
输出:
Enter passphrase for /home/Hyman/.ssh/id_dsa: myPassword Identity added: /home/Hyman/.ssh/id_dsa (/home/Hyman/.ssh/id_dsa)
一次执行您的密码。
现在,无论何时使用ssh,scp或者sftp命令,都不会提示您输入密码。
如果您正在使用Gnome之类的GUI,请使用以下命令:
$ ssh-askpass
或者
$ /usr/lib/openssh/gnome-ssh-askpass
要在Debian/Ubuntu下的GNOME会话中保存密码,请执行以下操作:a)单击系统b)选择首选项c)选择会话d)单击新建e)在名称文本区域中输入OpenSSH Password Management
在命令文本区域中输入/usr/lib/openssh/gnome-ssh-askpass
。
g)单击关闭以保存更改。
h)注销,然后重新登录到GNOME。
启动GNOME后,将出现一个对话框,提示您输入密码。
输入要求的密码。
从现在开始,ssh,scp或者sftp不会提示您输入密码。