3-ssh 服务

本贴最后更新于 1580 天前,其中的信息可能已经天翻地覆

3 ssh 服务

3.1 ssh 服务介绍

ssh: secure shell protocol, 22/tcp, 安全的远程登录,实现加密通信,代替传统的 telnet 协议

具体的软件实现:

  • OpenSSH:ssh 协议的开源实现,CentOS 默认安装
  • dropbear:另一个 ssh 协议的开源项目的实现

SSH 协议版本

  • v1:基于 CRC-32 做 MAC,不安全;man-in-middle
  • v2:双方主机协议选择安全的 MAC 方式,基于 DH 算法做密钥交换,基于 RSA 或 DSA 实现身份认证

3.1.1 公钥交换原理

clipboard.png

  • 客户端发起链接请求
  • 服务端返回自己的公钥,以及一个会话 ID(这一步客户端得到服务端公钥)
  • 客户端生成密钥对
  • 客户端用自己的公钥异或会话 ID,计算出一个值 Res,并用服务端的公钥加密
  • 客户端发送加密后的值到服务端,服务端用私钥解密,得到 Res
  • 服务端用解密后的值 Res 异或会话 ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
  • 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密

3.1.2 ssh 加密通讯原理

clipboard.png

3.2 openssh 服务

OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现,一般在各种 Linux 版本中会默认安装,基于 C/S 结构

Openssh 软件相关包:

  • openssh
  • openssh-clients
  • openssh-server

范例:openssh 相关包

[10:59:08 root@centos8 ~]#rpm -qa openssh* openssh-clients-8.0p1-4.el8_1.x86_64 openssh-server-8.0p1-4.el8_1.x86_64 openssh-8.0p1-4.el8_1.x86_64

服务器端程序:/usr/sbin/sshd

Unit 文件:/usr/lib/systemd/system/sshd.service

客户端:

  • Linux Client: ssh, scp, sftp,slogin
  • Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient

3.2.1 客户端 ssh 命令

ssh 命令是 ssh 客户端,允许实现对远程系统经验证地加密安全访问

当用户远程连接 ssh 服务器时,会复制 ssh 服务器/etc/ssh/ssh_host*key.pub 文件中的公钥到客户机的

~/.ssh/know_hosts 中。下次连接时,会自动匹配相对应的私钥,不能匹配,将拒绝连接

ssh 客户端配置文件: /etc/ssh/ssh_config

主要配置

#StrictHostKeyChecking ask #首次登录不显示检查提示StrictHostKeyChecking no # IdentityFile ~/.ssh/id_rsa # IdentityFile ~/.ssh/id_dsa # IdentityFile ~/.ssh/id_ecdsa # IdentityFile ~/.ssh/id_ed25519 # Port 22

范例:禁止首次连接的询问过程

[11:08:32 root@centos8 ~]#sed -i.bak '/StrictHostKeyChecking/s@.*@StrictHostKeyChecking no@' /etc/ssh/ssh_config

格式:

ssh [user@]host [COMMAND] ssh [-l user] host [COMMAND]

常见选项:

-p port:远程服务器监听的端口 -b 指定连接的源IP -v 调试模式 -C 压缩方式 -X 支持x11转发 -t 强制伪tty分配,如:ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3 -o option 如:-o StrictHostKeyChecking=no -i 指定私钥文件路径,实现基于key验证,默认使用文件: ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519,~/.ssh/id_rsa等

范例:

[10:09:59 root@centos7 certs]#ssh -t 192.168.10.81 ssh -t 192.168.10.71 root@192.168.10.81's password: root@192.168.10.71's password: Last login: Tue Jan 12 09:07:30 2021 from 192.168.10.1

范例:远程执行命令

[11:12:05 root@centos8 ~]#ssh 192.168.10.71 "sed -i.bak '/StrictHostKeyChecking/s@.*@StrictHostKeyChecking no@' /etc/ssh/ssh_config" root@192.168.10.71's password:

范例:在远程主机运行本地 shell 脚本

[11:15:22 root@centos8 ~]#hostname -I 192.168.10.81 [11:15:25 root@centos8 ~]#cat test.sh #!/bin/bash hostname -I [11:15:27 root@centos8 ~]#ssh 192.168.10.71 /bin/bash < test.sh root@192.168.10.71's password: 192.168.10.71

3.2.2 ssh 登录验证方式

ssh 服务登录的常用验证方式

clipboard.png

  1. 客户端发起 ssh 请求,服务器会把自己的公钥发送给用户
  2. 用户会根据服务器发来的公钥对密码进行加密
  3. 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

基于密钥的登录方式

clipboard.png

  1. 首先在客户端生成一对密钥(ssh-keygen)
  2. 并将客户端的公钥 ssh-copy-id 拷贝到服务端
  3. 当客户端再次发送一个连接请求,包括 ip、用户名
  4. 服务端得到客户端的请求后,会到 authorized_keys 中查找,如果有响应的 IP 和用户,就会随机生成一个字符串,例如:magedu
  5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
  6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
  7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

3.2.3 实现基于密钥的登录方式

在客户端生成密钥对

ssh-keygen -t rsa [-P 'password'] [-f “~/.ssh/id_rsa"]

把公钥文件传输至远程服务器对应用户的家目录

ssh-copy-id [-i [identity_file]] [user@]host

重设私钥口令

ssh-keygen -p

验证代理(authentication agent)保密解密后的密钥,口令就只需要输入一次,在 GNOME 中,代理被自动提供给 root 用户

#启用代理 ssh-agent bash #钥匙通过命令添加给代理 ssh-add

在 SecureCRT 或 Xshell 实现基于 key 验证

在 SecureCRT 工具—> 创建公钥—> 生成 Identity.pub 文件

转化为 openssh 兼容格式(适合 SecureCRT,Xshell 不需要转化格式),并复制到需登录主机上相应文件 authorized_keys 中,注意权限必须为 600,在需登录的 ssh 主机上执行:

ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys

范例:实现基于 key 验证

[11:20:21 root@centos7 ~]#ssh-keygen #下面的id_rsa是私钥id_rsa.pub是公钥 [11:23:48 root@centos7 ~]#ll .ssh/ total 12 -rw------- 1 root root 1675 Jan 12 11:23 id_rsa -rw-r--r-- 1 root root 394 Jan 12 11:23 id_rsa.pub -rw-r--r-- 1 root root 175 Jan 11 19:28 known_hosts [11:24:19 root@centos7 ~]#ssh-copy-id root@192.168.10.81 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.10.81's password: #输入远程用户密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.10.81'" and check to make sure that only the key(s) you wanted were added. [11:29:11 root@centos8 ~]#ll .ssh total 16 -rw------- 1 root root 394 Jan 12 11:24 authorized_keys -rw------- 1 root root 2602 Jan 11 14:06 id_rsa -rw-r--r-- 1 root root 566 Jan 11 14:06 id_rsa.pub -rw-r--r-- 1 root root 175 Jan 9 09:11 known_hosts [11:31:21 root@centos7 ~]#ssh 192.168.10.81 [11:32:14 root@centos7 ~]#scp /etc/fstab 192.168.10.81:/data fstab 100% 150 123.2KB/s 00:00 #对私钥加密 [11:35:47 root@centos7 ~]#ssh-keygen -p Enter file in which the key is (/root/.ssh/id_rsa): #回车,选择默认文件 Enter new passphrase (empty for no passphrase): #输入密码 Enter same passphrase again: #确认密码 Your identification has been saved with the new passphrase. [11:36:05 root@centos7 ~]#ssh 192.168.10.81 Enter passphrase for key '/root/.ssh/id_rsa': 输入加密的密码 Activate the web console with: systemctl enable --now cockpit.socket Last login: Tue Jan 12 11:35:06 2021 from 192.168.10.71 #启用ssh代理,之后第一次输入私钥密码后以后不用输入 [11:37:24 root@centos7 ~]#ssh-agent bash [11:37:31 root@centos7 ~]#ps aux | grep agent root 1686 0.0 0.0 72472 776 ? Ss 11:37 0:00 ssh-agent bash root 1700 0.0 0.0 112812 972 pts/0 R+ 11:37 0:00 grep --color=auto agent [11:37:41 root@centos7 ~]#ssh-add Enter passphrase for /root/.ssh/id_rsa: Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa) [11:37:58 root@centos7 ~]#ssh 192.168.10.81 Activate the web console with: systemctl enable --now cockpit.socket Last login: Tue Jan 12 11:36:19 2021 from 192.168.10.71

范例:基于 key 验证实现批量主机管理

[11:42:10 root@centos8 ~]#cat hosts.txt 192.168.10.81 192.168.10.71 [11:42:21 root@centos8 ~]#for i in `cat hosts.txt`;do ssh $i hostname -I;done 192.168.10.81 192.168.10.71

范例:实现 xshell 的基于 key 验证

先生成用户密钥,在导出公钥,上传至服务器

[11:54:49 root@centos8 ~]#cat id_rsa_2048.pub >.ssh/authorized_keys

3.2.4 其他 ssh 客户端工具

3.2.4.1 scp 命令

scp [options] SRC... DEST/

方式:

scp [options] [user@]host:/sourcefile /destpath scp [options] /sourcefile [user@]host:/destpath scp [options] [user@]host1:/sourcetpath [user@]host2:/destpath

常用选项:

-C 压缩数据流 -r 递归复制 -p 保持原文件的属性信息 -q 静默模式 -P PORT 指明remote host的监听的端口

3.2.4.2 rsync 命令

rsync 工具可以基于 ssh 和 rsync 协议实现高效率的远程系统之间复制文件,使用安全的 shell 连接做为传输方式,比 scp 更快,基于增量数据同步,即只复制两方不同的文件,此工具来自于 rsync 包

注意:通信两端主机都需要安装 rsync 软件

rsync -av /etc server1:/tmp #复制目录和目录下文件 rsync -av /etc/ server1:/tmp #只复制目录下文件

常用选项:

-n 模拟复制过程 -v 显示详细过程 -r 递归复制目录树 -p 保留权限 -t 保留修改时间戳 -g 保留组信息 -o 保留所有者信息 -l 将软链接文件本身进行复制(默认) -L 将软链接文件指向的文件复制 -u 如果接收者的文件比发送者的文件较新,将忽略同步 -z 压缩,节约网络带宽 -a 存档,相当于-rlptgoD,但不保留ACL(-A)和SELinux属性(-X) --delete 源数据删除,目标数据也自动同步删除

范例:

[14:18:25 root@centos8 ~]#rsync -auv --delete /data/fstab 192.168.10.71:/root

3.2.4.3 sftp 命令

交互式文件传输工具,用法和传统的 ftp 工具相似,利用 ssh 服务实现安全的文件上传和下载使用 ls cd mkdir rmdir pwd get put 等指令,可用?或 help 获取帮助信息

sftp [user@]host sftp> help

3.2.5 ssh 高级应用

SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。此外,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 连接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯

SSH 端口转发能够提供两大功能:

  • 加密 SSH Client 端至 SSH Server 端之间的通讯数据
  • 突破防火墙的限制完成一些之前无法建立的 TCP 连接

3.2.5.1 SSH 本地端口转发

SSH 本地端口转发

ssh -L localport:remotehost:remotehostport sshserver

选项:

-f 后台启用 -N 不打开远程shell,处于等待状态 -g 启用网关功能

范例:

#当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23 #data<-->localhost:9527 <-->localhost:XXXXX<-->sshsrv:22<-->sshsrv:YYYYY<-->telnetsrv:23 ssh -L 9527:telnetsrv:23 -Nfg sshsrv telnet 127.0.0.1 9527

范例:本地端口转发
clipboard.png

#在192.168.10.81操作 [19:23:28 root@centos8 ~]#hostname -I 192.168.10.81 [19:23:30 root@centos8 ~]#ssh -fNL 9527:192.168.10.72:80 192.168.10.71 [19:25:08 root@centos8 ~]#curl 127.0.0.1:9527 zhangzhuo

3.3.5.2 SSH 远程端口转发

ssh -R sshserverport:remotehost:remotehostport sshserver

示例:

#让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解 密后转发到telnetsrv:23 #Data<-->sshsrv:9527<-->sshsrv:22<-->localhost:XXXXX<-->localhost:YYYYY<-->telnetsrv:23 ssh -R 9527:telnetsrv:23 -Nf sshsrv

范例:远程端口转发并实现网关功能
clipboard.png

#在192.168.10.81执行 [19:32:27 root@centos8 ~]#hostname -I 192.168.10.81 #必须先打开gateway功能,否则无法打开所有IP对应端口 [19:39:20 root@centos8 ~]#vim /etc/ssh/sshd_config GatewayPorts yes [19:40:47 root@centos8 ~]#systemctl restart sshd #在192.168.10.71执行 [19:28:04 root@centos7 ~]#ssh -fNgR 9527:192.168.10.72:80 192.168.10.81 #在192.168.10.81执行 [root@localhost ~]# curl 192.168.10.81:9527 zhangzhuo

3.3.5.3 SSH 动态端口转发

clipboard.png

#当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet ssh -D 1080 root@sshserver -fNg #在本机firefox设置代理socket proxy:127.0.0.1:1080 curl --socks5 127.0.0.1:1080 http://www.google.com

范例:动态端口转发实现科学上网方式 1

clipboard.png

#在192.168.10.8执行 [19:49:06 root@centos8 ~]#ssh -fND 9527 192.168.10.71 [19:56:04 root@centos8 ~]#curl --socks5 127.0.0.1:9527 http://192.168.10.72 zhangzhuo #这种方式只能实现本机上网

范例:动态端口转发实现科学上网方式 2

clipboard.png

#在192.168.10.71执行 [19:48:52 root@centos7 ~]#ssh -gfND 9527 192.168.10.71 #在192.168.10.81执行 [20:02:19 root@centos8 ~]#curl --socks5 192.168.10.71:9527 http://192.168.10.72 zhangzhuo #这种可以实现其他主机也借助这个上网

火狐浏览器可以设置代理进行上网

clipboard.png

3.2.6 ssh 服务器配置

服务器端:sshd

服务器端的配置文件: /etc/ssh/sshd_config

服务器端的配置文件帮助:man 5 sshd_config

常用参数:

Port ListenAddress ip LoginGraceTime 2m PermitRootLogin yes #默认ubuntu不允许root远程ssh登录 StrictModes yes #检查.ssh/文件的所有者,权限等 MaxAuthTries 6 #pecifies the maximum number of authenticationattempts permitted per connection. Once the number of failures reaches halfthis value, additional failures are logged. The default is 6. MaxSessions 10 #同一个连接最大会话 PubkeyAuthentication yes #基于key验证 PermitEmptyPasswords no #空密码连接 PasswordAuthentication yes #基于用户名和密码连接 GatewayPorts no ClientAliveInterval 10 #单位:秒 ClientAliveCountMax 3 #默认3 UseDNS yes #提高速度可改为no GSSAPIAuthentication yes #提高速度可改为no MaxStartups #未认证连接最大值,默认值10 Banner /path/file #以下可以限制可登录用户的办法: AllowUsers user1 user2 user3 DenyUsers user1 user2 user3 AllowGroups g1 g2 DenyGroups g1 g2

范例:设置 ssh 空闲 60s 自动注销

Vim /etc/ssh/sshd_config ClientAliveInterval 60 ClientAliveCountMax 0 Service sshd restart #注意:新开一个连接才有效

范例:解决 ssh 登录缓慢的问题

vim /etc/ssh/sshd_config UseDNS no GSSAPIAuthentication no systemctl restart sshd

范例:在 ubuntu 上启用 root 远程 ssh 登录

#修改sshd服务配置文件 vim /etc/ssh/sshd_config #PermitRootLogin prohibit-password 注释掉此行 PermitRootLogin yes 修改为下面形式 systemctl restart sshd

ssh 服务的最佳实践

  • 建议使用非默认端口
  • 禁止使用 protocol version 1
  • 限制可登录用户
  • 设定空闲会话超时时长
  • 利用防火墙设置 ssh 访问策略
  • 仅监听特定的 IP 地址
  • 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12|xargs
  • 使用基于密钥的认证
  • 禁止使用空密码
  • 禁止 root 用户直接登录
  • 限制 ssh 的访问频度和并发在线数
  • 经常分析日志

3.4 ssh 其他相关工具

3.4.1 挂载远程 ssh 目录 sshfs

由 EPEL 源提供,目前 CentOS8 还没有提供,可以利用 ssh 协议挂载远程目录

[15:14:09 root@centos7 ~]#yum install fuse-sshfs [15:16:22 root@centos7 ~]#sshfs 192.168.10.81:/data /mnt/ -o nonempty [15:16:41 root@centos7 ~]#df Filesystem Size Used Avail Use% Mounted on devtmpfs 475M 0 475M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.7M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 2.8G 15G 17% / /dev/sda1 1014M 178M 837M 18% /boot tmpfs 98M 0 98M 0% /run/user/0 192.168.10.81:/data 17G 5.8G 12G 34% /mnt

注意:如果被挂载的目录非空需要加 -o nonempty 参数

3.4.2 自动登录 ssh 工具 sshpass

由 EPEL 源提供,ssh 登陆不能在命令行中指定密码。sshpass 的出现,解决了这一问题。sshpass 用于非 交互 SSH 的密码验证,一般用在 sh 脚本中,无须再次输入密码(本机 known_hosts 文件中有的主机才能生效)。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。

格式:

sshpass [option] command parameters

常见选项:

-p password #后跟密码它允许你用 -p 参数指定明文密码,然后直接登录远程服务器 -f filename #后跟保存密码的文件名,密码是文件内容的第一行。 -e #将环境变量SSHPASS作为密码

范例:

[15:15:05 root@centos8 ~]#yum -y install sshpass [15:19:52 root@centos8 ~]#rpm -ql sshpass /usr/bin/sshpass /usr/lib/.build-id /usr/lib/.build-id/1f /usr/lib/.build-id/1f/c5d6cf03500df846a1a801aab749f478845a4d /usr/share/doc/sshpass /usr/share/doc/sshpass/AUTHORS /usr/share/doc/sshpass/COPYING /usr/share/doc/sshpass/ChangeLog /usr/share/doc/sshpass/NEWS /usr/share/man/man1/sshpass.1.gz [15:20:08 root@centos8 ~]#sshpass -p 123456 ssh 192.168.10.71 [15:21:07 root@centos8 ~]#sshpass -p 123456 ssh 192.168.10.71 hostname -I 192.168.10.71 [15:22:14 root@centos8 ~]#cat pass.txt 123456 [15:22:19 root@centos8 ~]#sshpass -f pass.txt ssh 192.168.10.71 [15:24:18 root@centos8 ~]#export SSHPASS=123456;sshpass -e ssh 192.168.10.71

范例:批量修改多台主机的 root 密码为随机密码

[16:00:10 root@centos8 ~]#cat chanage_root_password.sh #!/bin/bash # #******************************************************************** #Author:zhangzhuo #QQ: 1191400158 #Date: 2021-01-12 #FileName:chanage_root_password.sh #URL: https://www.zhangzhuo.ltd #Description:The test script #Copyright (C): 2021 All rights reserved #******************************************************************** rpm -q sshpass &>/dev/null || yum -y install sshpass export SSHPASS=123456 NET=192.168.10 for i in {1..254};do { PASS=`openssl rand -base64 9` sshpass -e ssh -o StrictHostKeyChecking=no $NET.$i "echo $PASS | passwd --stdin root &>/dev/null" &>/dev/null echo $NET.$i:$PASS >> host.txt }& done wait

范例:批量部署多台主机 key 验证脚本 1

[16:31:17 root@centos8 ~]#cat sshpass1.sh #!/bin/bash NET=192.168.10 PASS=123456 ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null for i in {1..100};do { sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub $NET.$i &>/dev/null }& done wait

范例:批量部署多台主机 key 验证脚本 2

[16:37:27 root@centos8 ~]#cat sshpass2.sh #!/bin/bash HOSTS=" 192.168.10.71 192.168.10.72 " PASS=123456 ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null rpm -q sshpass &>/dev/null || yum install -y sshpass &>/dev/null for i in $HOSTS;do { sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub $i &>/dev/null }& done wait

3.4.3 轻量级自动化运维工具 pssh

EPEL 源中提供了多个自动化运维工具

  • pssh:基于 python 编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于 ssh 和 scp 的多个并行工具,项目:http://code.google.com/p/parallel-ssh/
  • pdsh:Parallel remote shell program,是一个多线程远程 shell 客户端,可以并行执行多个远程主机上的命令。 可使用几种不同的远程 shell 服务,包括 rsh,Kerberos IV 和 ssh,项目:https://pdsh.googlecode.com/
  • mussh:Multihost SSH wrapper,是一个 shell 脚本,允许使用命令在多个主机上通过 ssh 执行命令。 可使用 ssh-agent 和 RSA/DSA 密钥,以减少输入密码,项目:http://www.sourceforge.net/projects/mussh

pssh 命令选项如下:

-H:主机字符串,内容格式”[user@]host[:port]” -h file:主机列表文件,内容格式”[user@]host[:port]” -A:手动输入密码模式 -i:每个服务器内部处理信息输出 -l:登录使用的用户名 -p:并发的线程数【可选】 -o:输出的文件目录【可选】 -e:错误输出文件【可选】 -t:TIMEOUT 超时时间设置,0无限制【可选】 -O:SSH的选项 -P:打印出服务器返回信息 -v:详细模式 --version:查看版本

范例:

#默认使用ssh的key认证,通过 -A选项,使用密码认证批量执行指令 [16:41:11 root@centos8 ~]#pssh -H "192.168.10.71" -A hostname #输出信息 [16:41:35 root@centos8 ~]#pssh -H zhang@192.168.10.71 -A -i hostname #通过pssh批量关闭seLinux [16:53:23 root@centos8 ~]#pssh -H root@192.168.10.71 -A -i 'sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config' #多台主机 [16:53:49 root@centos8 ~]#pssh -H "192.168.10.71 192.168.10.72" -i -A hostname #多台主机 [16:55:23 root@centos8 ~]#cat host.txt 192.168.10.71 192.168.10.72 [16:55:27 root@centos8 ~]#pssh -h host.txt -i -A echo $HOSTNAME #将标准错误和标准正确重定向分别保存至本地主机的/data/stdout和/data/stderr目录下 [16:58:18 root@centos8 ~]#pssh -H 192.168.10.71 -o /data/stdout -e /data/stderr -i -A "hostname" #变量需要加单引号引起来 [16:59:54 root@centos8 ~]#pssh -h host.txt -A -i 'echo $HOSTNAME' #*需要用双或单引号引起来 [17:01:10 root@centos8 ~]#pssh -h host.txt -A -i 'ls /data/*'

pscp.pssh 命令

pscp.pssh 功能是将本地文件批量复制到远程主机

pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote

pscp-pssh 选项

-v 显示复制过程 -r 递归复制目录

范例:

#将本地curl.sh 复制到/data/目录 [17:05:46 root@centos8 ~]#pscp.pssh -H 192.168.10.71 -A /root/curl.sh /data/ #将本地多个文件批量复制到/app/目录 [17:06:32 root@centos8 ~]#pscp.pssh -H 192.168.10.71 -A /root/chanage_root_password.sh /root/push_ssh_key.sh /data/ #将本地目录批量复制到/app/目录 [17:09:16 root@centos8 ~]#pscp.pssh -H 192.168.10.71 -A -r /data/ /data/

pslurp 命令

pslurp 功能是将远程主机的文件批量复制到本地

pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local(本地名)

pslurp 选项

-L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称 -r 递归复制目录

范例:

#批量下载目标服务器的passwd文件至/app下,并更名为user [17:12:24 root@centos8 ~]#pslurp -H 192.168.10.71 -A -L /app /etc/passwd user [17:14:26 root@centos8 ~]#pslurp -h host.txt -A -L /data/ /etc/redhat-release version Warning: do not enter your password if anyone else has superuser privileges or access to your account. Password: [1] 17:14:33 [SUCCESS] 192.168.10.71 [2] 17:14:34 [SUCCESS] 192.168.10.72 [17:14:34 root@centos8 ~]#tree /data/ /data/ ├── 192.168.10.71 │ └── version └── 192.168.10.72 └── version 2 directories, 2 files

3.5 dropbear

由 Matt Johnston 所开发的 Secure Shell 软件。Dropbear 是一个相对较小的 SSH 服务器和客户端。它运行在一个基于 POSIX 的各种平台。 Dropbear 是开源软件,在麻省理工学院式的许可证。 Dropbear 是特别有用的“嵌入”式的 Linux(或其他 Unix)系统,如无线路由器,期望在存储器与运算能力有限的情况 下取代 OpenSSH,尤其是嵌入式系统

官网:http://matt.ucc.asn.au/dropbear/dropbear.html

范例:编译安装 dropbear

#安装相关包: [17:16:21 root@centos8 ~]#yum install gcc zlib-devel #下载 [17:19:00 root@centos8 ~]#wget https://matt.ucc.asn.au/dropbear/dropbear-2020.80.tar.bz2 [17:19:31 root@centos8 ~]#tar xvf dropbear-2020.80.tar.bz2 #编译安装 [17:19:50 root@centos8 dropbear-2020.80]#less INSTALL README [17:21:06 root@centos8 dropbear-2020.80]#./configure --prefix=/apps/dropber --sysconfdir=/etc/dropber [17:23:48 root@centos8 dropbear-2020.80]#make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" [17:23:48 root@centos8 dropbear-2020.80]#make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install [17:23:17 root@centos8 dropbear-2020.80]#tree /apps/ /apps/ └── dropber ├── bin │ ├── dbclient │ ├── dropbearconvert │ ├── dropbearkey │ └── scp ├── sbin │ └── dropbear └── share └── man ├── man1 │ ├── dbclient.1 │ ├── dropbearconvert.1 │ └── dropbearkey.1 └── man8 └── dropbear.8 #配置PATH变量 [17:24:55 root@centos8 ~]#echo 'PATH=/apps/dropbear/sbin:/apps/dropbear/bin:$PATH' >/etc/profile.d/dropber.sh #生成私钥 [17:31:21 root@centos8 ~]#mkdir /etc/dropbear [17:31:46 root@centos8 ~]#dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048 [17:32:37 root@centos8 ~]#dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key #启动ssh服务 [17:32:38 root@centos8 ~]#dropbear -p :2222 -FE #前台运行,相当于sshd [17:34:56 root@centos8 ~]#dropbear -p :2222 #后台运行 客户端访问 [17:09:40 root@centos7 ~]#ssh -p 2222 192.168.10.81 [17:35:51 root@centos8 ~]#dropbear -p 2222 192.168.10.81 #相当于ssh
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖 • 1 关注

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...