在Linux上使用SSH
ssh-安全外壳
SSH或Secure Shell是一种网络协议,允许使用安全通道在两台联网服务器之间传递数据。ssh的主要用途是在网络服务器上获取安全的远程Shell,但是,它也常用于在服务器之间复制文件(SCP)。要使用ssh获取安全的远程外壳,远程外壳必须正在运行sshd
(安全外壳守护程序)。通常,ssh
使用端口22进行通信,但是,许多系统管理员将更改为备用端口,以增加额外的安全性。但是,更改端口不会带来很多安全性提升。如果需要保护ssh通信,则应考虑使用防火墙仅允许已知流量!
在Linux上,ssh的一般实现称为OpenSSH
。默认情况下,大多数现代Linux发行版都应安装OpenSSH。OpenSSH配置文件的标准位置是/etc/ssh
。在这里,您将找到客户端的ssh_config文件和服务器端的sshd_config文件。
在OpenSUSE安装中找到的示例配置文件和密钥:
linux-pd5y:/etc/ssh # ls -l total 164 -rw------- 1 root root 125811 Feb 22 2012 moduli -rw-r--r-- 1 root root 3056 Feb 22 2012 ssh_config -rw------- 1 root root 668 Mar 14 10:16 ssh_host_dsa_key -rw-r--r-- 1 root root 605 Mar 14 10:16 ssh_host_dsa_key.pub -rw------- 1 root root 227 Mar 14 10:16 ssh_host_ecdsa_key -rw-r--r-- 1 root root 177 Mar 14 10:16 ssh_host_ecdsa_key.pub -rw------- 1 root root 980 Mar 14 10:16 ssh_host_key -rw-r--r-- 1 root root 645 Mar 14 10:16 ssh_host_key.pub -rw------- 1 root root 1679 Mar 14 10:16 ssh_host_rsa_key -rw-r--r-- 1 root root 397 Mar 14 10:16 ssh_host_rsa_key.pub -rw-r----- 1 root root 3825 Feb 22 2012 sshd_config
生成SSH密钥
SSH使您能够创建可以与其他服务器交换的密钥,从而使您无需键入密码即可进行访问。用于创建这些密钥的实用程序称为ssh-keygen
。要快速创建密钥,我们只需执行命令ssh-keygen -t rsa
。然后,这将逐步通过几个交互式提示,要求您进行确认或输入其他信息。下面是生成公钥
的示例:
john@john-desktop:~/.ssh$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/john/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/john/.ssh/id_rsa. Your public key has been saved in /home/john/.ssh/id_rsa.pub. The key fingerprint is: d7:f5:6e:20:9b:fe:29:51:f3:d4:2f:bb:6c:c5:9a:31 john@john-desktop The key\'s randomart image is: +--[ RSA 2048]----+ | | | | | . .| | . .o.o| | S . o..=o| | . .+Eo=| | o. Oo| | ...=o | | .+=. | +-----------------+
在上面的示例中,我们选择使用rsa
(Rivest,Shamir,Adleman)算法来创建我们的数字签名。我们还可以选择dsa
。
将公钥复制到远程服务器
在上面的ssh-keygen -t rsa
命令的例子中,我们可以看到创建了一个公钥:
您的公钥已保存在/home/john/. sh/id_rsa.pub中
要使用我们的公钥,我们必须首先复制文件id_rsa
的内容。发布到远程服务器上名为authorized_keys
的文件。在将新密钥复制到远程服务器authorized_keys文件时,始终使用append选项。如果我们盲目地复制文件内容,我们可能会覆盖文件并销毁任何其他键可能位于那里。将密钥传输到远程服务器的最简单方法是执行类似如下的命令:
cat $HOME/.ssh/id_rsa.pub | ssh 192.168.0.11 'cat >> .ssh/authorized_keys && echo "Contents Copied Successfully"'
上面的命令只是将本地服务器上的密钥附加到远程服务器上的authorized_keys
文件。
理想情况下,远程主机上的authorized_keys
文件应该锁定其权限,以阻止其他人复制该文件。要实现这一点,您需要在远程服务器上做以下更改:
john@linux-pd5y:~/.ssh> chmod 600 authorized_keys john@linux-pd5y:~/.ssh> ls -l authorized_keys -rw------- 1 john users 399 Apr 25 09:34 authorized_keys
现在提供远程服务器允许公共密钥身份验证,我们应该能够ssh
到远程服务器。在远程服务器上,我们需要在sshd_config
文件中启用PubkeyAuthentication
。
如何测试您的ssh公钥
测试我们的密钥是否正常工作
john@john-desktop:~/ubuntu$ ssh 192.168.0.11 Last login: Thu Apr 25 09:39:34 2013 from 192.168.0.14 Have a lot of fun...
SCP-安全复制文件
SCP使用ssh
在两个网络服务器之间复制数据,这意味着它使用相同的身份验证和安全方法。SCP替代了较早的rcp
命令。
john@john-desktop:~/ubuntu$ scp new_ubuntu_file.txt [email protected]:/home/john/suse/ new_ubuntu_file.txt 100% 31KB 30.8KB/s 00:00
因为我们已经与服务器192.168.0.11
交换了公钥,所以scp
命令复制了文件new_ubuntu_file.txt
,而无需输入密码。
命令scp
指示系统复制文件new_ubuntu_file
。在IP地址为192.168.0.11
,指定用户为john
的远程服务器上/home/john/suse
的目录下执行txt。我们可以从本地服务器执行命令ssh 192.168.0.11 ls -l /home/john/suse/
来确认这个文件已经成功传输。
ssh -vvv-调试身份验证过程
如果您希望看到身份验证过程正在运行,我们可以在ssh
命令中添加一个额外的参数。通过在ssh命令中添加-v
,我们将获得身份验证过程的详细
输出。如果添加一个额外的v
,以便现在有了-vv
,我们将得到非常非常冗长
的输出。