linux下怎样设置ssh无密码登录
用SSL加密Key实现自动登录
需要材料:
1 被管理的SSH服务器一台。
2 管理端电脑一台。
环境:
管理服务器: ip:19216801 机器名:server
被管理服务器:ip:19216802 机器名:client
生成密钥对:
生成公钥密钥对是在管理服务器上生成的:
[root@server ~]# ssh-keygen -b 1024 -t rsa
Generating public/private rsa key pair #提示正在生成rsa密钥对
Enter file in which to save the key (/home/usrname/ssh/id_dsa): #询问公钥和私钥存放的位置,回车用默认位置即可
Enter passphrase (empty for no passphrase): #询问输入私钥密语,输入密语
Enter same passphrase again: #再次提示输入密语确认
Your identification has been saved in /home/usrname/ssh/id_dsa #提示公钥和私钥已经存放在/root/ssh/目录下
Your public key has been saved in /home/usrname/ssh/id_dsapub
The key fingerprint is:
x6:68:xx:93:98:8x:87:95:7x:2x:4x:x9:81:xx:56:94 root@server #提示key的指纹
拷贝你的公钥到被管理的服务器上
在你的管理服务器上把你的公钥拷贝到被管理服务器上要进行自动登陆的用户目录下。
[root@server ~]# scp ssh/id_dsapub remote_usrname@19216802: #比如你想使用用户peter登陆,则remote_usrname请以peter代替
改名和进行权限设置
登陆被管理的服务器,进入需要远程登陆的用户目录,把公钥放到用户目录的 ssh 这个目录下(如果目录不存在,需要创建~/ssh目录,并把目录权限设置为700),把公钥改名为authorized_keys2,并且把它的用户权限设成600。
[peter@client ~]$ ls
id_rsapub
[peter@client ~]$ mkdir ~/ssh #如果当前用户目录下没有 ssh 目录,请先创建目录
[peter@client ~]$ chmod 700 ~/ssh
[peter@client ~]$ mv id_rsapub ~/ssh
[peter@client ~]$ cd ~/ssh
[peter@client ~]$ cat id_rsapub >> authorized_keys2
[peter@client ~]$ rm -f id_rsapub
[peter@client ~]$ chmod 600 authorized_keys2
[peter@client ~]$ ls -l
total 4
-rw------- 1 peter peter 225 Oct 10 11:28 authorized_keys2
测试使用密钥对进行远程登陆
[root@server ~]# ssh peter@19216802
Enter passphrase for key '/root/ssh/id_rsa': #提示输入密码短语,请输入刚才设置的密码短语
Last login: Sun Oct 10 11:32:14 2010 from 19216801
[peter@client ~]$
如果你不能用正确的登录,应该重新检查一下你的authorized_keys2的权限。也可能要检查ssh目录的权限。
使用 ssh-agent(ssh代理)自动输入密码短语
牢记你的“密码短句”,现在你可以用你的密钥而不是密码来登录你的服务器了,但是这样仍然没有省什么事,你还是要输入密钥的“密码短语”。有更简便的方法吗?答案就是采用SSH代理(ssh-agent),一个用来帮你记住“密码短语”的程序。 ssh-agent是OpenSSH中默认包括的ssh代理程序。
登陆管理服务器
[root@server ~]# ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent2147; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2148; export SSH_AGENT_PID;
echo Agent pid 2148;
当你运行ssh-agent,它会打印出来它使用的 ssh 的环境和变量。要使用这些变量,有两种方法,一种是手动进行声明环境变量,另一种是运行eval命令自动声明环境变量。
方法一:手动声明环境变量
[root@server ~]# SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent2147; export SSH_AUTH_SOCK;
[root@server ~]# SSH_AGENT_PID=2148; export SSH_AGENT_PID;
[root@server ~]# printenv | grep SSH #检查 ssh 环境变量是否已经加入当前会话的环境变量
SSH_AGENT_PID=2148
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent2147
方法二:运行eval命令自动声明环境变量
[root@server ~]# eval `ssh-agent`
Agent pid 2157
[root@server ~]# printenv | grep SSH #检查 ssh 环境变量是否已经加入当前会话的环境变量
SSH_AGENT_PID=2148
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent2147
现在 ssh-agent 已经在运行了,但是 ssh-agent 里面是空白的不会有解密的专用密钥。我们要告诉它我们有私钥和这个私钥在哪儿。这就需要使用 ssh-add 命令把我们的专用密钥添加到 ssh-agent 的高速缓存中。
[root@server ~]# ssh-add ~/ssh/id_dsa
Enter passphrase for /home/user/ssh/id_dsa: #输入你的密码短语
Identity added: /home/user/ssh/id_dsa (/home/user/ssh/id_dsa)
[root@server ~]# ssh-add -l #查看 ssh代理的缓存内容
1024 72:78:5e:6b:16:fd:f2:8c:81:b1:18:e6:9f:77:6e:be /root/ssh/id_rsa (RSA)
输入了密码短句,现在好了,你可以登录你的远程服务器而不用输入你的密码短语了,而且你的私钥是密码保护的。
1 什么是SSH
SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。SSH是每一台Linux电脑的标准配置,但是在windows系统中默认是没有安装SSH的,需要安装SSH相关服务端软件,比如FreeSSHD。
2 SSH可以用来做什么
SSH可以用于远程登录主机,登录方式通常有两种:口令登录和公钥登录
一:口令登录:通过在服务端设定的用户名和密码进行登录,每次都登录都需要填写密码
二:公钥登录:通过一对公钥和私钥登录,公钥存放在服务端私钥存放在客户端,在登录时服务端向客户端发生一个随机字符串,然后客户端通过私钥先进行加密然后发生到服务端,在服务端接受和用公钥进行解密,然后匹配是否正确解密来验证登录,注意:存在在服务端的公钥名称和用户名一致,已区分不同用户不同的公钥;这样每次就可以直接用公钥登录省去了密码的繁琐。
SSH可以用户服务端和客户端之间双向文件传输
3 SharpSSH与SSH服务端FreeSSHD
SharpSSH是一个用C#实现的SSH客户端组件,用户可以根据需要修改使用改组件已满足自己的需求,SharpSSH介绍和组件下载网站:http://sharpssh2codeplexcom/,也可以在这里下载。
注意:在官网下载SharpSSH会因为主机为安装Mono而出现MonoSecuritydll的引用错误,只需要下载MonoSecuritydll重新引用即可。
我在Windows7 VS2012的环境下测试官网下载的SharpSSH项目升级成功,解决方案如下:
其中有两个项目:Examples,SharpSSH顾名思义,Examples是使用示例,SharpSSH就是真正的实现项目,设置Examples为启动项,运行效果如下:
可以看到,示例为我们提供了16个功能项,再次我们需要测试远程登录和文件传输,使用第13, 和16项测试即可,同时也会用到第5项生成公钥私钥对;
客户端SharpSSH已经实现了,接下来在Windows系统中就需要安装客户端了,这里选择FreeSSHD作为客户端,官网下载地址:http://wwwfreesshdcom/ctt=download或这里:http://downloadcsdnnet/detail/dangercheng/6804861
下载下来直接下一步下一步安装,安装完成后运行会提示你是否生成Key选择是即可,同时会安装FreeSSHDService服务,选择关闭该服务;
此时可以看到支持telnet和SSH服务,且都关闭,到此步客户端服务端都已经准备就绪,下面就进行我们的登录测试和文件传输测试吧;
4 远程登录执行命令
上面提过,登录有两种方式,口令登录和公钥登录,先介绍口令登录吧;
口令登录:即在服务端freeSSHd上创建一个用户名和密码,使用此密码口令登录
首先在freeSSHd上的Users选项中点击Add弹出添加用户界面,然后Login填写用户名,authorization选择Password stored as SHA1 hash 然后填写密码和重复密码,勾选该用户可用服务,如下图,创建了用户名和密码都是test:
然后我们选择SSH项,将Use new console engine项的勾选去掉已防止中午乱码,如图:
选择确定即可创建成功,然后回到主界面我们打开SSH服务
如上图所示即表示SSH服务已经成功开启;但是有可能会错误:常见原因是地址已使用,这是端口号22已经被使用造成的,关闭该端口的进程即可。
接下来我们运行我们的sharpSSH进行登录测试吧。
我们选择第13项,然后输入远程地址I(由于服务端就在本机所以是127001),然后不选择公钥登录,然后输入密码,连接成功,执行date命令查询当前时间:
现在我们测试公钥登录:
公钥登录需要先生成公钥私钥对,我们选择第5项KeyGen来生成,命名为test(和用户名一致),Sig Type选择dsa, 然后Comment为空弹出窗口输入passphrase我们不输入直接选择ok,这样就在sharpSSH的bin\Debug目录下生成了我们的test的公钥私钥两个文件。如图:
生成了公钥testpub和私钥test两个文件。然后将公钥文件testpub放到freeSSHd指定的公钥文件夹目录:
也就是C:\Program Files\freeSSHd\这个目录下,并去掉后缀pub,然后修改test用户的authorization选择Public Key如图:
接下来再测试:
5 传输文件
首先我们修改服务端文件位置:
这样我们服务端的默认位置就是我们在freeSSHd下面自己添加的sftpFile的目录了,我们在里面放一个testjpg,现在我们要将这个传到我们sharpSSH的目录页就是bin\Debug目录下并改名为testClientjpg:
可以看见传输的速度还是很快的93k0秒完成,有兴趣的可以试试大文件的传输,到此关于SSH的登录和文件传输的测试完毕,当然SSH还有其他的很多很多的强大功能,这里不能一一列举测试,有兴趣自己取试试。
从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证),只要知道自己的帐号和口令,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,这种验证方式不能保证你正在连接的服务器就是想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到中间人这种攻击方式的攻击。
第二种级别(基于密匙的安全验证),需要依靠密匙,也就是必须为自己创建一对密匙,并把公有密匙放在需要访问的服务器上。如果要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用密匙进行安全验证。
服务器收到请求之后,先在在该服务器的用户根目录下寻找你的公有密匙,然后把它和发送过来的公有密匙进行比较。如果两个密匙一致,服务器就用公有密匙加密质询(challenge)并把它发送给客户端软件。客户端软件收到质询之后就可以用私人密匙解密再把它发送给服务器。
扩展资料
SSH为较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初为UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。
SSH在正确使用时可弥补网络中的漏洞。客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
使用OpenSSH工具将会增进你的系统安全性。 所有使用OpenSSH工具的通讯,包括口令,都会被加密。telnet和ftp使用纯文本口令,并被明文发送。
这些信息可能会被截取,口令可能会被检索,然后未经授权的人员可能会使用截取的口令登录进的系统而对系统造成危害。应该尽可能地使用OpenSSH的工具集合来避免这些安全问题。
-ssh
-Secure Shell
ssl是通讯链路的附加层。可以包含很多协议。https, ftps, …
ssh只是加密的shell,最初是用来替代telnet的。通过port forward,也可以让其他协议通过ssh的隧道而起到加密的效果。
解释原因:
SSL,即安全套接层(Secure Sockets Layer),它是一种安全协议,是Netscape公司在推出Web浏览器首版时一起提出的。
SSH,也就是Security Shell,由 IETF 的网络小组(Network Working Group)所制定,是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
SSL有证书中心(CA)公正,可以确定发送者的身份。而SSH没有,可能会被“中间人攻击”,它相当于现代版的窃听。如果攻击者插在用户与远程主机之间(比如在公共wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。不过确保禁用了不安全的SSL/TLS协议,且所访问的网址前面有HTTPS作为开头,可以避免大多数的中间人攻击。SSL终止代理可以处理传入的SSL连接,解密SSL并将未加密的请求传递给其他服务器。SSL允许您通过签名证书使用PKI(公钥基础设施)。而使用SSH,您必须通过ftp等其他协议手动交换密钥指纹。
SSH有一个用户身份验证层,这是SSL所缺乏的(不过是因为它并不需要验证功能)。在使用utf – 8编码时,SSH协议使用了更多的协议。考虑到有更多的潜在攻击,SSH的攻击面似乎更大。但这只是因为SSH内建了一个完整的应用程序。安全性和SSL其实相差无几。
从概念上讲,我们可以使用SSH并将隧道部分替换为SSL中的隧道部分,甚至还可以使用HTTPS并使用SSH-with-data-transport替换SSL事务,并使用钩子从其证书中提取服务器公钥。没有科学上的不可能性,如果做得恰当,它们的安全性将保持不变。
0条评论