[RHEL]-14-远程SSH详解
引言
这篇文章主要介绍ssh常用的配置,ssh登录时的两种密码认证方式,并且介绍如何使用scp通过ssh传输文件。
文章目录
0×1.ssh配置文件常用参数
RHEL系统中默认安装了openssh-server软件包,其中就包含了ssh远程登录服务,可以使用下面的命令来查看系统中安装的openssh版本:
[root@qingsword.com ~]# rpm -aq openssh* openssh-6.4p1-8.el7.x86_64 openssh-server-6.4p1-8.el7.x86_64 openssh-clients-6.4p1-8.el7.x86_64 #如果上面的命令没有返回openssh-server,可以使用yum安装 [root@qingsword.com ~]# yum install -y openssh-server
服务安装好后默认的配置文件位置在"/etc/ssh/sshd_config",这个配置文件中的内容非常多,大部分都不需要去配置,有几个比较常用的配置参数,解释如下:
#Port 22 默认的sshd服务端口;
#ListenAddress 0.0.0.0 设定sshd服务端监听的IP地址(服务器上有多块网卡时,指定在哪块网卡上监听ssh传入连接);
#Protocol 2 SSH协议的版本号(默认为2,无需设置);
#HostKey /etc/ssh/ssh_host_key SSH协议版本为1时,私钥存放的位置;
HostKey /etc/ssh/ssh_host_rsa_key SSH协议版本为2时,RSA私钥存放的位置;
#HostKey /etc/ssh/ssh_host_dsa_key SSH协议版本为2时,DSA私钥存放的位置;
#PermitRootLogin yes 设定是否允许root用户直接登录(在RHEL系统中默认为yes,在Ubuntu等系统中默认为no);
#StrictModes yes 当远程用户私钥改变时则直接拒绝连接;
#MaxAuthTries 6 最大密码尝试次数;
#MaxSessions 10 最大终端数(默认最大为10,可以修改这个配置允许更多终端连接);
#PasswordAuthentication yes 是否允许密码验证;
#PermitEmptyPasswords no 是否允许空密码登陆(不安全,建议关闭);
如果需要修改上面的任意配置,只需要将配置前的#去除,然后修改对应参数即可。
如果修改了ssh默认的端口号,请将新的端口号添加到系统防火墙iptables中,再添加到selinux配置中,否则其他主机会连接失败,如果仅为了做实验,可以清空iptables然后关闭selinux子系统,如下:
#关闭selinux子系统,清空iptables防火墙配置 [root@qingsword.com ~]# setenforce 0 [root@qingsword.com ~]# iptables -F #修改ssh默认端口为23333 [root@qingsword.com ~]# vim /etc/ssh/sshd_config 将 #Port 22 修改成 Port 23333 #每次对配置文件做出修改,都需要重启sshd服务使其生效 [root@qingsword.com ~]# systemctl restart sshd.service #如果ssh服务端修改了登录端口,就需要在客户端使用参数-p指定端口号,如下 [root@qingsword.com ~]# ssh -p 23333 登录用户名@服务器ip地址
在一些非安全的环境中,不建议关闭SElinux,在确保SElinux开启的状态下,可以使用下面的方法来修改ssh默认的连接端口:
#打开SElinux子系统 [root@qingsword.com ~]# setenforce 1 #查询SElinux子系统中对ssh允许的开放端口 [root@qingsword httpd]# semanage port -l | grep ssh ssh_port_t tcp 22 #将我们自定义的端口号添加到ssh_port_t列表里(如果要删除这个端口,就将下面命令中的-a替换成-d) [root@qingsword httpd]# semanage port -a -t ssh_port_t -p tcp 23333 #重启ssh服务,这样就能够在SElinux开启的情况下,使用我们自定义的端口来连接ssh了 [root@qingsword httpd]# systemctl restart sshd.service
0×2.ssh登录验证方式
ssh登录方式分为两种,一种使用账户密码验证,另一种使用密钥对的方式,下面分别演示这两种登录方式,在局域网中,ssh服务器地址为192.168.1.100,客户机为192.168.1.105;
密码验证方式登录ssh:
#使用客户机105登录100,使用的登录用户为qing(这个用户是ssh服务器上创建的普通用户,而非本地105机器上的用户,如果想使用ssh服务器的root用户登录,可以将qing替换成root,前提是你需要知道账户对应的登录密码) qing@qingsword.com:~$ ssh qing@192.168.1.100 The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established. ECDSA key fingerprint is SHA256: #需要接受一个公钥,输入yes回车 Are you sure you want to continue connecting (yes/no)? yes qing@192.168.1.100's password: #输入用户qing对应密码 Last login: Mon Nov 21 22:02:41 2016 from 192.168.1.105 #这就以qing的身份远程登录上了ssh服务器,从who的输出中可以看到是从105机器上登录的 [qing@qingsword.com ~]$ who root :0 2016-11-22 00:08 (:0) root pts/0 2016-11-22 00:08 (:0) root pts/1 2016-11-22 00:12 (:0) qing pts/2 2016-11-22 00:14 (192.168.1.105) [qing@qingsword.com ~]$ exit 登出
第二中登录方式是使用密钥对,首先需要使用ssh-keygen命令在本地生成一个密钥对:
#在客户端创建密钥对,直接输入ssh-keygen,默认会以rsa 2048位创建密钥 qing@qingsword.com:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/qing/.ssh/id_rsa):#设置密钥的存储路径,使用默认回车即可 Created directory '/home/qing/.ssh'. Enter passphrase (empty for no passphrase): #回车就是不给密钥加密(建议给密钥加一个密码,但一定不要忘记了这个密码,否则就不能解密密钥了) Enter same passphrase again: #再次输入密码
创建完成后,查看对应的目录(请用自己的用户名替换下面路径中的qing)
#在路径中会看到两个文件,其中id_rsa.pub中保存的就是当前用户的公钥,id_rsa中保存的就是当前用户的私钥(如果你要用这种方式验证,一定要保存好这两个文件) qing@qingsword.com:~$ ls /home/qing/.ssh/ id_rsa id_rsa.pub
之后将公钥传递给ssh服务端:
#使用下面的命令会将本地的id_rsa.pub公钥中的内容传递给服务器中qing用户,保存在ssh服务器的"/home/qing/.ssh/authorized_keys"文件中(使用的是服务器哪个用户传递的本地公钥,公钥就保存在对应用户的家目录中的.ssh目录下的一个叫做authorized_keys的文件中,这个文件中会保存很多远程用户传递过来的公钥信息) #如果本地有多个公钥文件,可以添加参数 -i 然后在后面指定本地的公钥路径,将指定的公钥传递给服务器,本例仅有一个公钥,所以不需要指定 qing@qingsword.com:~$ ssh-copy-id qing@192.168.1.100
再次使用qing用户登录就不需要输入密码了:
qing@qingsword.com:~$ ssh qing@192.168.1.100 [qing@qingsword.com ~]$ exit 登出 Connection to 192.168.1.100 closed.
Ps:如果没有ssh-copy-id命令,可能是没有安装openssh-client。
如果想让服务器仅允许这种密钥登录方式,可以修改sshd_config配置文件中的PasswordAuthentication参数,将yes改为no,并去掉前面的#,重启sshd服务后,就只能使用密钥登录方式了。
0×3.如何scp传输文件
请参考下面这篇文章:
[ubuntu入门手册]-13-使用ssh实现文件安全互传
0×4.如何使用ssh端口转发
请参考下面这篇文章:
[ubuntu入门手册]-18-SSH端口转发