在Linux上使用SSH

时间:2019-04-29 03:17:35  来源:igfitidea点击:

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,我们将得到非常非常冗长的输出。