SSH建立远程连接

SSH远程管理–端口号:22

1.配置OpenSSH服务端

1.1配置SSH及配置文件

openssh服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行“systemctl status sshd.service”即可按默认配置启动sshd服务,包括root在内的大部份用户(只要拥有合法的登录shell)都可以远程登录系统。

sshd服务的配置文件是:/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。下面介绍一些最常用的配置项,关于sshd_config文件的更多配置可参考man手册。

修改配置文件前对文件进行备份:cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

1.2服务监听选项

sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度。

[root@localhost ~]# vim /etc/ssh/sshd_config

Port 22               //监听端口为22
ListenAddress 192.168.10.1      //监听地址为192.168.10.1
.......               //省略内容
UseDNS no              //禁用DNS反射解析
......               //省略内容

[root@localhost ~]# systemctl restart sshd
1.3用户登录控制

sshd服务默认允许root用户登录,当在Internet中使用时这是非常不安全的。普遍的做法是:先以普通用户远程登录,进入安全shell环境后,根据实际需要使用su命令切换为root用户。关于sshd服务的用户登录控制,通常就禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为2分钟)及最大重次数,若超过限制后仍未登录则断开连接。

[root@localhost ~]# vim /etc/ssh/sshd_config

LoginGraceTime 2m     //登录验证时间   默认为2分钟
PermitRootLogin no    //禁止root用户登录
MaxAuthTries 3       //最大重试次数 默认为6次
MaxSessions 10      //最大连接数
PermitEmptyPasswords no  //禁止空密码用户登录
.....           //省略内容

[root@localhost ~]# systemctl restart sshd

如果只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法类似(不能同时使用)。
举例: 只允许stu1和stu2用户登录,其中stu2用户仅能从IP地址为 192.168.10.100的主机远程登录,配置如下:

[root@localhost ~]# vim /etc/ssh/sshd_config
.....                   //省略内容

AllowUsers stu1 stu2@192.168.10.100    //多个用户用空格隔开

[root@localhost ~]# systemctl restart sshd
1.4登录验证方式

对于服务器的管理,除了用户帐号的安全控制外,登录验证试也非常重要。sshd服务支持两种验证方式:密码验证和密钥对验证,可以设置只使用其中一种,也可以两种都用。

(1)密码验证

​ 以服务器中本地系统用户的登录名称、密码进行验证。从客户机角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力较弱。

(2)密钥对验证
 要求提供相匹配的密钥信息才能通过验证。通常先在客户中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大增强了远程管理的安全性。公钥(Public Key)与私钥(Privtae Key)的关系如下:
  • 公钥与私钥是成对生成,这两个密钥互不相同,可以互相加密与解密。

  • 不能根据一个密钥来推算出另一个密钥。

  • 公钥对外公开,私钥只有私钥的持有人才知道。

  • 公钥与私钥要配对使用,如果用公钥对数据进行加密,只有用相对就的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。

  • 当密码验证与密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用, 只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用。

  • 其中,公钥库文件用来保存各客户机上传的公钥文本,以便与客户机本地的私钥文件进行匹配。

[root@localhost ~]# vim /etc/ssh/sshd_config

PasswordAuthentication yes           //启用密码验证
PubkeyAuthentication yes            //启用密钥对验证
AuthorizedKeysFile   .ssh/authorized_keys  //指定公钥库数据文件
.....                     //省略内容

[root@localhost ~]# systemctl restart sshd
  • 如果只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法类似(不能同时使用)。
举例: 只允许stu1和stu2用户登录,其中stu2用户仅能从IP地址为 192.168.10.100的主机远程登录,配置如下:

[root@localhost ~]# vim /etc/ssh/sshd_config
.....                   //省略内容
AllowUsers stu1 stu2@192.168.10.100    //多个用户用空格隔开
[root@localhost ~]# systemctl restart sshd

2. 使用SSH客户端程序

在CentOS7系统中,OpenSSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp、sftp远程复制和文件传输命令等。实际上,任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,如windows平台中的Xshell、SecureCRT、Putty等图形工具。

2.1命令程序ssh、scp、sftp
(1)ssh远程登录

通过ssh命令可以远程登录sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护。使用时应指定登录用户、目标主机地址作为参数。

举例:以student用户远程登录到主机192.168.75.158

[root@localhost ~]# ssh student@192.168.75.158
Are you sure you want to continue connecting (yes/no)? yes  //接受密钥
student@192.168.75.158's password:   //输入密码

当用户第一次登录SSH服务器时,必须接受服务器发来的RSA密钥(根据提示输入“yes”)后才能继续验证。接收的密钥信息将保存到~/.ssh/known_hosts文件中。密码验证成功以后,就登录到目标服务器的命令行环境中了,就好像把客户机的显示器、键盘连接到服务器一样。

如果sshd服务器使用了非默认的端口号(如2345),则在登录时必须通过“-p”选项指定端口号。

举例:以student用户远程登录到主机192.168.75.158的2345端口

[root@localhost ~]#ssh -p 2345 student@192.168.75.158 
(2)scp远程复制

使用scp命令可以利用SSH安全连接与远程主机相互复制文件。使用scp命令时,除了必须指定复制源、目标外,还应指定目标主机地址、登录用户,执行后提示验证口令即可。

举例:将远程主机的/etc/passwd文件复制到本机,

将本机的/var/log/复制到远程主机。

[root@localhost ~]#scp root@192.168.75.158:/etc/passwd /root/pwd11.txt

[root@localhost ~]#scp -r /var/log root@192.168.75.158:/logbak
(3)sftp安全ftp

通过sftp命令可以利用SSH安全连接与远程主机上传、下载文件 ,采用了与FTP类似的登录过程和交互环境,便于目录资源管理。

举例:使用sftp远程登录,并进行文件上传与下载。

[root@localhost ~]#sftp student@192.168.75.158
2.2图形工具MobaXterm

MobaXterm是windows下一款功能非常强大的安全终端模拟软件,支持Telnet、SSH、SFTP等协议,可以方便地对Linux主机进行远程管理。

安装并运行MobaXterm后,在Session Settings对话框中指定相关协议,并指定远程主机的IP地址、端口号等相关信息,然后单击OK,根据提示输入密码验证后即可成功登录目标主机。

2.3构建密钥对验证的SSH体系

在Windows端使用X-shell的密钥对登录服务器Linux完整步骤:

Linux的IP:192.168.220.130

1)在服务器端创建密钥对,登录者为lying

ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/student/.ssh/id_rsa):  //指定私钥位置
    Enter passphrase (empty for no passphrase): 123456  //设置私钥短语   
    Enter same passphrase again:123456    //确认所设置的短语

2)修改配置文件root身份:

vim /etc/ssh/sshd_config
    PasswordAuthentication yes           //启用密码验证
    PubkeyAuthentication yes            //启用密钥对验证
    AuthorizedKeysFile   .ssh/authorized_keys  //指定公钥库数据文件

重启服务以生效配置文件:

systemctl restart sshd

3)查看密钥对确认根文件下是否有.ssh文件

	cd  ;ls -a

4)进入.ssh文件 将id_rsa.pub改名为authorized_keys以匹配配置文件设置

	cd .ssh;mv id_rsa.pub authorized_keys

5)将id_rsa私钥剪贴到客户端中并将.ssh中的私钥文件删除

	主文件夹->其他位置->计算机->root 
	右上角列表->设置为显示隐藏文件
	—>.ssh—>将id_rsa拖至X-shell端电脑D:\id_rsa


6)打开X-shell,新建连接,主机为192.168.220.130

6)打开X-shell,新建连接,主机为192.168.220.130

连接:用任意普通用户lying登录,用户密钥为D:\id_rsa,密码为设置的私钥短语qwert——连接成功
方法一:在Linux客户端使用密钥对登录服务器
(1)在客户端创建密钥对
[student@localhost log]$ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/student/.ssh/id_rsa):  //指定私钥位置
    Enter passphrase (empty for no passphrase):  //设置私钥短语   
    Enter same passphrase again:    //确认所设置的短语
(2)将公钥上传至服务器

公钥文件放在根目录下,私钥文件放在客户端

[student@localhost ~]$ scp ~/.ssh/id_rsa.pub root@192.168.75.158:/
[(3)在服务器中导入公钥文本(把公钥文件放到个人用户stu1下面)
[root@localhost ~]# mkdir -p /home/stu1/.ssh

[root@localhost .ssh]# cat /tmp/id_rsa.pub >> /home/stu1/.ssh/authorized_keys

[root@localhost .ssh]# ll

-rw-r--r--. 1 root root 411 1230 22:59 authorized_keys
(4)配置sshd_config文件允许密钥对访问
PasswordAuthentication no   密码验证

PubkeyAuthentication yes    密钥对验证

AuthorizedKeysFile    .ssh/authorized_keys
(5)客户端使用密钥对登录服务器
[student@localhost ~]$ssh stu1@192.168.75.158 -i 私钥文件

]

方法二:在windows系统中使用putty实现密钥对登录服务器
(1)首先要用PuTTYgen 生成密钥对
(2)点击Save private key按钮,选择一个存放文件的路径并定义名称,点击“保存”。
(3)复制公钥到Linux服务器
[root@aminglinux ~]# mkdir /root/.ssh  //创建目录
[root@aminglinux ~]# chmod 700 /root/.ssh  //更改这个目录的权限
[root@aminglinux ~]# vim /root/.ssh/authorized_keys //把公钥内容粘贴到这个文件里并保存。
(4)关闭SELinux
   [root@aminglinux ~]# setenforce 0 //暂时关闭SELinux,下次重启还会再开启。
查看selinux安全机制:
getenforce  
Enforcing(1)保护  
Permissive(0)关闭
(5)设置Putty通过密钥登陆

3.SSH的安全加固

OpenSSH 默认设置

  • TCP 端口 – 22
  • OpenSSH 服务配置文件 – sshd_config (位于 /etc/ssh/

1、 基于公匙的登录

2、 禁用 root 用户登录

3、 禁用密码登录

4、 限制用户的 ssh 访问

5、 禁用空密码

6、 为 ssh 用户或者密匙使用强密码

7、 为 SSH 的 22端口配置防火墙

8、 修改 SSH 端口和绑定 IP

9、 使用 TCP wrappers (可选的)

10、 阻止 SSH 破解或暴力攻击

11、 限制 TCP 端口 22 的传入速率(可选的)

12、 使用端口敲门(可选的)

13、 配置空闲超时注销时长

14、 为 ssh 用户启用警示标语

15、 禁用 .rhosts 文件(需核实)

16、 禁用基于主机的授权(需核实)

17、 为 OpenSSH 和操作系统打补丁

18、 Chroot OpenSSH (将用户锁定在主目录)

19、禁用客户端的 OpenSSH 服务

20、来自 Mozilla 的额外提示

你可能感兴趣的:(Linux)