SSH命令-【Linux】
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可以在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的练级,在连接和传输数据的过程中使用双向非对称加密。
SSH最常见的用途是远程登陆系统,利用SSH可以传输命令行界面、远程执行命令和远程拷贝文件等功能。
openSSH-server 软件
openSSH是使用SSH协议实现计算机网络加密通信的软件工具。OpenSSH程序主要包含以下五个部分:
1、SSH:SSH客户端 #/etc/ssh/ssh
2、SSHd:SSH服务器 #/etc/ssh/ssh_config
3、SSH-keygen:创建用于认证的密钥
4、SSH-agent,ssh-add:密钥管理工具
5、SSH-keyscan:扫描系统公钥
通过安装 ssh 软件包的方式可以同时安装 openssh-client、openssh-server 软件包
(1)安装 SSH:
apt install -y ssh
(2)查询系统中已安装的 openssh 软件包:
dpkg -l | grep openssh
(3)查看系统中 openssh 软件包的版本:
SSH -V
SSH服务器:
SSH服务器安装后即自动运行,使用TCP协议监听 22 端口。服务的主配置文件在:/etc/ssh/sshd_config
(1):查看系统中SSH服务的运行状态:
systemctl status sshd
(2)查看SSH服务监听的网络接口及端口:
ss -ntupl | grep sshd
SSH客户端的全局配置文件是:/etc/ssh/ssh_config
客户端使用SSH密钥对远程登陆服务器:
(1)在客户端上生成密钥对:
ssh-keygen
(2)上传公钥到需要远程登陆的Linux服务器:
ssh-copy-id demo@192.168.10.1
(3)测试免密码远程登陆:
ssh demo@192.168.10.1
使用SSH远程执行命令:
ssh demo@192.168.10.1 "cat /etc/debian_version"
从linux客户端使用SSH远程传输文件:
(1)使用 scp 命令上传和下载文件:
scp text.txt demo@192.168.10.1: ~/
(2)使用 sftp 登陆远程服务器上传和下载文件:
sftp demo@192.168.10.1put [路径]get [路径]
SSH服务器端安全加固:
1、确保SSH客户端软件的安全性。建议使用系统自带的SSH客户端,如果要使用第三方软件,尽量选择开源软件,且一定要从官网下载
2、使用普通用户登陆,并且禁用 root 用户远程登陆
3、使用密钥对登陆,而不使用密码方式登陆
4、SSH服务只监听指定的IP地址和端口哦(使用大于1024的随机端口替换默认的22端口)
5、限制登陆重试的次数
6、启用网络防火墙保护SSH服务
7、使用应用防火墙(如fail2ban)防止暴力破解
可以修改SSH服务器的配置文件参数,优化SSH服务,提高安全性。常用的配置项如下:
vim /etc/ssh/sshd_configport 8778 //默认的22号端口(小于1024的被默认定义为服务端口)是最容易被攻击的对象,所以通常要改为一个大于1024的端口addressfamily inet //只监听IPv4地址,增加安全性listenaddress 192.168.122.200 //明确只监听某个IP接口(比如只监听内网的接口)protocol 2logingracetime 1m //减少最大的登陆时常,但需要合理,不能太小,否则正常请求可能登陆不上permitrootlogin no //禁用 root 用户远程登陆maxauthtries 6 //最大认证重试次数设为 6maxsessions 10 //最大会话数为 10allowusers zhangsan //只允许普通用户 zhangsan 远程登陆usedns no //不使用DNS解析主机名
如果修改了SSH服务监听的IP地址或端口,在修改生效前,要确保网络防火墙开放了新的端口的访问权限。否则有可能导致无法远程登陆服务器。如果只允许某个用户登陆,那么要确保该用户能够登陆。
查看与SSH远程登陆相关的系统日志:
(1)查看近期用户登陆情况:
last
(2)查看近期用户登陆失败的情况:
lastb
(3)查看系统内的用户近期的登陆情况:
lastlog
SSH命令参数:
-1:强制使用ssh协议版本1-2:强制使用ssh协议版本2-4:强制使用IPv4地址-6:强制使用IPv6地址-A:开启认证代理连接转发功能-a:关闭认证代理连接转发功能-b:使用本机指定地址作为对应连接的源ip地址-C:请求压缩所有数据-c:选择所加密的密码型式 (blowfish|3des 预设是3des)-e:设定跳脱字符-F:指定ssh指令的配置文件-f:后台执行ssh指令-g:允许远程主机连接主机的转发端口-i:指定身份文件(预设是在使用者的家目录 中的 .ssh/identity)-l:指定连接远程服务器登录用户名-N:不执行远程指令-n:重定向stdin 到 /dev/null-o:指定配置选项-p:指定远程服务器上的端口(默认22)-P:使用非特定的 port 去对外联机(注意这个选项会关掉 RhostsAuthentication 和 RhostsRSAAuthentication)-q:静默模式-T:禁止分配伪终端-t:强制配置 pseudo-tty-v:打印更详细信息-X:开启X11转发功能-x:关闭X11转发功能-y:开启信任X11转发功能-L listen-port:host:port 指派本地的 port 到达端机器地址上的 port建立本地SSH隧道(本地客户端建立监听端口)
将本地机(客户机)的某个端口转发到远端指定机器的指定端口.
-R listen-port:host:port 指派远程上的 port 到本地地址上的 port
建立远程SSH隧道(隧道服务端建立监听端口)
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口.
-D port 指定一个本地机器 “动态的’’ 应用程序端口转发.