SSH远程管理

Posted 还行少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH远程管理相关的知识,希望对你有一定的参考价值。

配置OpenSSH服务端

1.SSH服务及配置文件

在centos7中,OPENSSH服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。
sshd服务的配置文件默认位于/etc/ssh/sshd_config

[root@localhost ~]# rpm -qc openssh-server  //查看配置文件
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd

2.服务监听选项

sshd服务使用的端口默认为TCP22端口,可修改,并且可以指定监听服务的IP地址,SSH协议的版本V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度

[root@localhost ~]# vi /etc/ssh/sshd_config   //编辑ssh服务器配置,以下为默认配置
。。。
#Port 22                 //监听端口
#ListenAddress 0.0.0.0  //监听地址
#ListenAddress ::       //监听地址V6
#UseDNS yes             //启用DNS反向解析
。。。

3.用户登录控制

关于sshd服务的用户登陆控制,通常应禁止root用户或密码为空的用户登录。另外,可以限制登陆验证的时间及最大重试次数,此外还可以只允许或禁止某些用户登录

[root@localhost ~]# vi /etc/ssh/sshd_config   //编辑ssh服务器配置,以下为默认配置
。。。
#LoginGraceTime 2m      //登陆验证时间
#PermitRootLogin yes   //允许Root登录       
#MaxAuthTries 6        //最大重试次数为6
#MaxSessions 10        //最大连接数为10
#PasswordAuthentication yes        //开启密码验证机制
#PermitEmptyPasswords no   //不允许空密码登录
AllowUsers  root  zhangsan  lisi@192.168.30.4  //只允许这些用户登录,lisi只允许在指定主机远程登录 
DenyUsers  zhangsan   //张三又在白名单,又在黑名单,以黑名单为优,禁止登录
。。。

4.登录验证方式

[root@localhost ~]# vi /etc/ssh/sshd_config   //编辑ssh服务器配置,以下为默认配置
#PasswordAuthentication yes        //开启密码验证机制
#PubkeyAuthentication yes        //启用密钥对验证
AuthorizedKeysFile      .ssh/authorized_keys   //指定公钥库数据文件

4.1 密码验证

以服务器中本地系统用户的登录名称、密码进行认证。使用方式简便,但是较不安全

4.2 密钥对验证

使用方法
通常先在客户机中创建一对密钥文件(公钥,私钥),然后将公钥文件放到服务器的指定位置。远程登陆时,系统将使用公钥,私钥进行加密解密关联验证,最后登录成功

公钥和私钥的关系
公钥和私钥是成对生成的,互不相同,可以互相加密解密
不能根据一个密钥推算另一个密钥
公钥对外公开,私钥只有私钥的持有人知道

使用SSH客户端程序

1.ssh远程登录

远程登录到192.168.30.3

[root@localhost ~]# ssh 192.168.30.3   //远程到192.168.30.3
The authenticity of host '192.168.30.3 (192.168.30.3)' can't be established.
ECDSA key fingerprint is SHA256:396BF852ITFX9y8B/HTvPAeICxxYzk4Wc7o8nWgyIQ4.
ECDSA key fingerprint is MD5:75:63:23:ba:73:cc:5d:4d:e6:2a:6a:9b:c3:71:43:a7.
Are you sure you want to continue connecting (yes/no)? yes    //确定连接
Warning: Permanently added '192.168.30.3' (ECDSA) to the list of known hosts.
root@192.168.30.3's password:       //输入密码
Last login: Tue May 25 15:18:00 2021 from 192.168.30.254
[root@localhost ~]#ifconfig ens33 | grep "inet "   //确认当前主机地址
inet 192.168.30.3  netmask 255.255.255.0  broadcast 192.168.30.255

2.scp远程复制

将远程主机中的/etc/passwd文件复制到本机,并将本机的/etc/cups目录复制到远程主机

[root@localhost ~]# scp root@192.168.30.3:/etc/passwd /root/pwd3.txt   //将远程主机中的/etc/passwd文件复制到本机
root@192.168.30.3's password: 
passwd                                                                            100% 2310     1.1MB/s   00:00    
[root@localhost ~]# scp -rp /etc/cups/ root@192.168.30.3:/tmp   //将本机的/etc/cups目录复制到远程主机
root@192.168.30.3's password: 
cups-browsed.conf                                      100% 1029    54.0KB/s   00:00    
classes.conf                                           100%    0     0.0KB/s   00:00    
client.conf                                            100%    0     0.0KB/s   00:00    
cups-files.conf                                        100% 3091     2.6MB/s   00:00    
[root@localhost ~]# 

3.sftp安全FTP

通过sftp命令可以SSH安全连接与远程主机上传、下载文件,采用了与FTP类似的登录过程和交互式环境

[root@localhost ~]# sftp 192.168.30.3       //建立连接
root@192.168.30.3's password:          //输入密码 
Connected to 192.168.30.3.   

sftp> ls      //查看192.168.30.3目录下文件
anaconda-ks.cfg        initial-setup-ks.cfg   下载                 公共                 图片                 
文档                 桌面                 模板                 视频                 音乐                 
sftp> lls       //查看本机目录下文件
anaconda-ks.cfg  initial-setup-ks.cfg  pwd3.txt  公共  模板  视频  图片  文档  下载  音乐  桌面
sftp> get /etc/passwd     //下载文件
Fetching /etc/passwd to passwd
/etc/passwd                                                                       100% 2310     1.8MB/s   00:00    
sftp> put /root/passwd    //上传文件
Uploading /root/passwd to /root/passwd
/root/passwd                                                                      100% 2310     2.5MB/s   00:00    

案例

1.修改监听端口,禁止root登录,禁用DNS反向解析,测试最大登录次数

[root@localhost ~]# vi /etc/ssh/sshd_config   //编辑ssh服务器配置
。。。
Port 222                 //监听端口222
UseDNS no          //禁用用DNS反向解析
PermitRootLogin no   //禁止Root登录       
MaxAuthTries 6        //最大重试次数为6
。。。
[root@localhost ~]# systemctl reload sshd   //重载服务

[root@localhost ~]# ssh root@192.168.30.3   //默认端口登录被拒绝
ssh: connect to host 192.168.30.3 port 22: Connection refused
[root@localhost ~]# ssh root@192.168.30.3 -p 222   //以root用户指定端口登录,尝试三次后失败
root@192.168.30.3's password: 
Permission denied, please try again.
root@192.168.30.3's password: 
Permission denied, please try again.
root@192.168.30.3's password: 
Authentication failed.

[root@localhost ~]# ssh -o NumberOfPasswordPrompts=10 root@192.168.30.3 -p 222  //测试最大重试次数为6次
root@192.168.30.3's password: 
Permission denied, please try again.
root@192.168.30.3's password: 
Permission denied, please try again.
root@192.168.30.3's password: 
Permission denied, please try again.
root@192.168.30.3's password: 
Permission denied, please try again.
root@192.168.30.3's password: 
Permission denied, please try again.
root@192.168.30.3's password: 
Received disconnect from 192.168.30.3 port 222:2: Too many authentication failures
Authentication failed.

[root@localhost ~]# 
[root@localhost ~]# ssh zhangsan@192.168.30.3 -p 222   //以zhangsan登录,成功
zhangsan@192.168.30.3's password: 
[zhangsan@localhost ~]$ 

2.实现免密码登录

[root@localhost ~]# ssh-keygen -t rsa  //创建算法为RSA的密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):     //指定私钥的位置
Enter passphrase (empty for no passphrase):               //设置私钥短语
Enter same passphrase again:                               //确认设置的短语
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:OEQROicqU1LM0vqQX5byt4iBloSP5fzVyWb5Xog7r2U root@l
The key's randomart image is:
+---[RSA 2048]----+
| +.   +o         |
|..+  o           |
|o+. +.o          |
|=+o.+= .         |
|+@o=  ooSo       |
|o=B . o.B. .     |
|.  + + +..E .    |
|  . o . .+..     |
|        o=o      |
+----[SHA256]-----+

[root@localhost ~]# ssh-copy-id root@192.168.30.3    //上传到服务器的指定位置
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be instal
/usr/bin/ssh-copy-id: INFO: attempting to log in with the
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be install
root@192.168.30.3's password:                   //输入密码
 
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.
and check to make sure that only the key(s) you wanted we


[root@localhost ~]# ssh 192.168.30.3   //验证,无需密码
Last login: Tue May 25 16:43:25 2021 from 192.168.30.254
[root@localhost ~]# 

以上是关于SSH远程管理的主要内容,如果未能解决你的问题,请参考以下文章

如何管理在每个 git 版本中添加私有代码片段?

如何使用Android片段管理器传递变量[重复]

Android:使用支持片段管理器时复制片段

YASnippet - emacs 的代码片段管理工具

片段管理访问错误可见 return false

python代码实现远程ssh连接