SSH(Secure SHell)使用
SSH(Secure SHell)使用
1. 什么是SSH?
传统的网络服务程序,如ftp,pop和telnet在本质上是不安全的,因为它们使用明文
传送口令和数据,很容易被冒充真正服务器的中间人修改通信数据,影响你的正常通信。
SSH可以对你的数据进行加密,所以可以防止"中间人"攻击,DNS和IP欺骗,还一个
好处是它对传输数据进行了压缩,可以加快传输的速度。
现在一般使用的是OpenSSH 2.X,免费,而且同时支持1.x和2.x的版本。
2. SSH是如何工作的?
从客户端来看,SSH提供两种级别的安全验证:
1. 基于口令的安全验证,只要知道自己的账号和密码就可以登录远程的主机,数据也都是
加密的,但不能确定的是正在连接的服务器是不是你想到登录的服务器,也有可能受到"中间人"
的攻击
2. 基于密匙的安全验证,需要自己创建一对密匙,并把公用密匙放在服务器上。如果你需要
连接到SSH服务器上,客户端就会向服务器端发出请求,请求用你的密匙进行安全验证。服务器
收到请求之后,先在服务器上找到公用密匙,再用这个密匙和你发送过来的进行比对。如果两个
密匙一致,服务器就用公用密匙加密"质询"(challenge)并把它发送给客户端。客户端软件收到
质询之后再用你的私人密匙进行解密再把它发给服务器。
第二种方式更安全,数据加密,但登录时间可以比较长。
3. 为什么要采用第二种方法登录?
采用密码登录的缺点:
a)用户无法设置空密码(即使系统允许空密码,也会十分危险)
b)密码容易被人偷窥或猜到
c)服务器上的一个帐户若要给多人使用,则必须让所有使用者都知道密码,
导致密码容易泄露,而且修改密码时必须通知所有人
而采用公钥可以解决以上问题:
a)公钥认证允许使用空密码,省去每次登录都需要输入密码的麻烦
b)多个使用者可以通过各自的密钥登录到系统上的同一个用户
c)即使修改了对应用户的密码,也不会影响登陆
d)若同时禁用密码认证,则只要保证私钥的安全,不会受到暴力破解的威胁
4. 本机Win 7和Virtual box虚拟机ubuntu之间的实验
4.1 进行ssh的密码口令连接
1. 需要在VB中设置连接方式由NAT改为Bridge
2. 使用"sudo apt-get install openssh-server"帮Ubuntu安装ssh服务器,
使用"sudo service ssh start"启动ssh服务
可以使用命令ps -e|grep ssh来查看是否成功启动
如果没有启动,可以使用命令sudo /etc/init.d/ssh start启动服务
3. 在Windows即主机中使用Putty登录Ubuntu,输入Ubuntu的ip地址即可,
其他默认。putty的下载地址:
4. 输入用户名和密码就可以远程登录ubuntu了
4.2 进行ssh的密钥连接-在Win 7下制作密钥
4.2.1 使用puttygen制作密钥
启动puttygen,为了兼容openssh密钥,选择"SSH2 RSA",点击Generate,
并在窗口的空白区域随意移动鼠标以获得生成密钥的随机数据,直到进度条结束为止。
完成效果为:
输入key passphrase和confirm passphrase,类似私钥密码,点击"Save private key"。
公钥信息在上面的文本框中,等下需要复制到ubuntu系统的特定文件中。
可以看到私钥的保存内容包含了公钥和私钥。
4.2.2 修改ubuntu系统中openssh的配置
修改/etc/ssh/sshd_config:
PermitRootLogin no # 禁止root用户登陆
StrictModes yes # 检查密钥的用户和权限是否正确,需要是authorized_keys文件一定为644权限,默认是打开的
RSAAuthentication yes # 启用 RSA 认证
AuthorizedKeysFile .ssh/authorized_keys # 验证公钥的存放路径
PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication no # 禁止密码认证,只能进行密钥连接,默认是打开的。
ChallengeResponseAuthentication no #关闭挑战应答方式
UsePAM no #不使用PAM认证
以上参数可以根据需要进行调整。
然后重启sshd服务:
sudo /etc/init.d/ssh stop
sudo /etc/init.d/ssh start
或者直接:
sudo /etc/init.d/ssh restart
4.2.3 拷贝公钥信息到ubuntu的特定文件中
在之前的窗口中,拷贝公钥内容,并写入~/.ssh/authroized_keys文件下
如果没有.ssh目录和authroized_keys文件,需要自己创建,并且要修改目录和文件的权限
>mkdir ~/.ssh
>chmod 700 ~/.ssh
>emacs ~/.ssh/authorized_keys
>chmod 644 ~/.ssh/authorized_keys
644权限代表别人不能对此文件进行写操作,用来保护别人不能随意把他的
公钥写进去。
4.2.4 使用putty进行密钥登录
在Connection->SSH->Auth中选择私钥文件:
在Connection->Data中写入你的登录时用的用户名
也要在Session那写在ubuntu系统的IP,再点击open按钮。
这个时候,需要输入passphrase密码,也就是私钥密码。这个密码的作用是保护
私钥文件,就算别人得到你的私钥文件,没有这个密码也不能进行登录。
4.3 进行ssh的密钥连接-在Ubuntu下制作密钥
4.3.1 在Linux下生成密钥
在命令行下运行:
> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/compilers/.ssh/id_rsa): #输入私钥保存地址
Enter passphrase (empty for no passphrase): #输入私钥密码
Enter same passphrase again: #确认密码
Your identification has been saved in /home/compilers/.ssh/id_rsa.
Your public key has been saved in /home/compilers/.ssh/id_rsa.pub.
The key fingerprint is:
e7:f6:98:57:f0:d9:93:54:30:76:9f:10:09:c0:f8:b9 compilers@compilers-vm
The key's randomart image is:
+--[ RSA 2048]----+
| o....o*..|
| . . o.o+|
| . . .o|
| o . . |
| S o o.o.|
| E +o.|
| o . .|
| . +. |
| o.. |
+-----------------+
4.3.2 把公钥写入authorized_keys文件中
> cd ~/.ssh
> cat id_rsa.pub >> quthorized_keys #需要换行加入新的内容
4.3.3 生成putty私钥
1. 把id_rsa传到windows系统上。
2. 使用puttygen的"Load private key"读取id_rsa文件,并输入私钥密码:
文本框里的内容应该和id_rsa.pub中的一致。点击"Save private key"保存私钥。
4.3.4 使用putty进行密钥登录
那就是和之前一样的操作:
作者:btchenguang
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.