基于RSA的非对称加密算法加密SSH远程管理
基于RSA的非对称加密算法加密SSH远程管理
0x01 前言:
一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。
密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。
下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。
0x02 制作密钥对
首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:
1 | [root@q1jun ~]# ssh-keygen |
密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。
现在,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。
0x03 在服务器上安装公钥
将生成的公钥安装到服务器中:
1 | #进入安装密钥的目录 |
0x04 设置SSH,打开密钥登入功能
编辑/etc/ssh/sshd_config
文件,修改以下设置:
1 | RSAAuthentication yes |
另外,请留意 root 用户能否通过 SSH 登录:
1 | PermitRootLogin yes |
当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:
1 | PasswordAuthentication no |
重启SSH服务:
1 | [root@q1jun ssh]# systemctl restart sshd |
0x05 将私钥下载到客户端
这里将介绍四种在服务器与本地之间传输文件的方式,本人倾向于使用前两种即sftp
和scp
,其他两种不做演示。
0x0501 文件传输:sftp
可以通过sftp
将服务器的id_rsa
私钥下载到本地:
1 | ❯ sftp root@120.27.131.99 |
Secure Ftp 是一个基于SSH安全协议的文件传输管理工具。由于它是基于SSH的,会在传输过程中对用户的密码、数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中被窃取,比FTP有更高的安全性。在功能方面与FTP很类似,不仅可以传输文件数据,而且可以进行远程的文件管理(如建立,删除,查看文件列表等操作)。Sftp与ftp虽然只有一字之差,但基于的传输协议却是不同的。因此不能用sftp client去连接ftp server 也不能用 ftp client 去连接 sftp server。
建立连接:sftp user@host
从本地上传文件:put localpath
下载文件:get remotepath
与远程相对应的本地操作,只需要在命令前加上”l” 即可,方便好记。
例如:lcd lpwd lmkdir
0x0502 文件传输:scp
个人还是比较喜欢使用scp
来远程传输文件的,通过scp
将服务器的id_rsa
私钥下载到本地:
1 | ❯ scp root@120.27.131.99:/root/.ssh/id_rsa ~/ |
SCP :secure copy (remote file copy program) 也是一个基于SSH安全协议的文件传输命令。与sftp不同的是,它只提供主机间的文件传输功能,没有文件管理的功能。
复制local_file
到远程目录remote_folder
下
scp local_file remote_user@host:remote_folder
复制local_folder
到远程remote_folder
(需要加参数 -r 递归)
scp –r local_folder remote_user@host:remote_folder
以上命令反过来写就是远程复制到本地
0x0503 文件传输:sz/rz
sz/rz 是基于ZModem传输协议的命令。对传输的数据会进行核查,并且有很好的传输性能。使用起来更是非常方便,但前提是window端需要有能够支持ZModem的telnet或者SSH客户端,例如secureCRT。
首先需要在secureCRT中可以配置相关的本地下载和上传目录,然后用rz、sz命令即可方便的传输文件数据。
下载数据到本地下载目录:sz filename1 filename2 …
上传数据到远程:执行rz –be 命令,客户端会弹出上传窗口,用户自行选择(可多选)要上传的文件即可。
0x0504 文件传输:rcp
rcp不是一种安全的的传输文件的方式,rcp通过rsh(rsh见下面)来执行远程命令,要使用rcp必须经过一些配置,现在rcp已经被scp取代了,常用scp来进行文件传输。要使用rcp,需要具备以下条件:
(1)如果系统中有/etc/hosts
文件,应确保该文件包含要与之进行通信的远程主机信息:internet_address official_name alias。例如:1.186.10.*** blade1.ibm.com.cnblade
(2).rhosts
文件:.rhosts 文件位于远程系统的根目录下,其中包含本地系统的名称和本地登录名。例如,远程系统的 .rhosts 文件中的项可能是:blade1 root;其中,blade1 是本地系统的名称,root 是本地登录名。这样,blade1 上的 root 即可在包含 .rhosts 文件的远程系统中来回复制文件。
配置过程:
(1) 在双方root用户根目录下建立.rhosts文件,并将双方的hostname加进去.在此之前应在双方的 /etc/hosts文件中加入对方的IP和hostname
(2) 把rsh服务启动起来,redhat默认是不启动的。方法:用执行ntsysv
命令,在rsh选项前用空格键选中,确定退出。然后执行:service xinetd restart
即可。
(3) 到/etc/pam.d/
目录下,把rsh文件中的auth required /lib/security/pam_securetty.so
一行用“#”注释掉即可。(只有注释掉这一行,才能用root用户登录)
命令使用:
rcp [options] [[user@]host1:]file1 ...[[user@]host2:]file2
options:
-r 递归地把源目录中的所有内容拷贝到目的目录中。
-p 试图保留源文件的修改时间和模式,忽略umask。
0x06 通过RSA私钥登入SSH
在此之前确认已经从远程服务器中下载了id_rsa
私钥到本地电脑中
我的
id_rsa
存放的目录为/Users/q1jun/id_rsa (~/id_ras)
通过ssh
的 -i
参数指定私钥存放的位置,具体命令如下:
如果设置了密钥锁码,中间还要输入第一步时设置的密钥锁码。
如果是Windows系统:
推荐使用xshell登录,学生版本可以免费使用,登录方式可以采用用户名和密码,以及Public Key等多种形式。
(这里就不演示了,傻瓜操作)