首页 > 其他分享 >SSH交互式脚本StrictHostKeyChecking选项 benchmode=yes

SSH交互式脚本StrictHostKeyChecking选项 benchmode=yes

时间:2023-06-01 14:12:45浏览次数:45  
标签:no SSH sshpass test yes StrictHostKeyChecking root ssh

SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查。

什么是SSH公钥检查
SSH 连接远程主机时,会检查主机的公钥。如果是第一次该主机,会显示该主机的公钥摘要,提示用户是否信任该主机:

The authenticity of host '10.0.0.1 (10.0.0.1)' can't be established.
ECDSA key fingerprint is 91:63:21:08:4a:96:23:5b:f6:98:c9:a8:cd:cb:8b:91.
Are you sure you want to continue connecting (yes/no)?

当选择接受,就会将该主机的公钥追加到文件 ~/.ssh/known_hosts 中。当再次连接该主机时,就不会再提示该问题了。

如何去掉公钥确认?
在首次连接服务器时,会弹出公钥确认的提示。这会导致某些自动化任务由于初次连接服务器而任务中断。或者由于~/.ssh/known_hosts 文件内容清空,导致自动化任务中断。 SSH 客户端的 StrictHostKeyChecking 配置指令,可以实现当第一次连接服务器时,自动接受新的公钥。只需要修改 /etc/ssh/ssh_config 文件,包含下列语句:

Host *
StrictHostKeyChecking no

或者在 ssh 命令行中用 -o 参数

$ ssh -o StrictHostKeyChecking=no 10.0.0.1
---------------------

1: 当通过ssh连接远程服务器的时候,可能会出现以下繁琐场景,需要手工输入yes:

ssh username@ip

 这对于某些分布式集群来说是不行的,甚至导致集群都不能启动成功,对于像pssh,pscp这样的自动化工具来说,也不希望这一步的验证,如何在连接的时候不提示这个信息呢:

1 方法1、ssh -o "StrictHostKeyChecking no" username@hostname<br>方法2:修改/etc/ssh/ssh_config,在文件最后添加 StrictHostKeyChecking no,接着重启ssh服务

2:远程执行服务器上面的命令可以通过sshpass(当集群机器之间没有免密的时候),如果没有安装,,执行  yum install sshpass -y

用法:

1 2 3 4 5 6 7 8 9 10 11 12 13 [root@test ~]# sshpass -h Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters    -f filename   Take password to use from file        -----指定一个文件,从文件中读取密码    -d number     Use number as file descriptor for getting password    -p password   Provide password as argument (security unwise)   ----命令行直接输入密码,不安全    -e            Password is passed as env-var "SSHPASS"         -----通过设置环境变量SSHPASS来保存密码    With no parameters - password will be taken from stdin      -P prompt     Which string should sshpass search for to detect a password prompt    -v            Be verbose about what you're doing    -h            Show help (this screen)    -V            Print version information At most one of -f, -d, -p or -e should be used

Eg:

(1)使用 -f

1 2 3 4 [root@test ~]# sshpass -f passwd.txt ssh [email protected] "free -m"               total        used        free      shared  buff/cache   available Mem:          96405       27169       12563        4066       56672       63775 Swap:           126          19         107

(2)使用 -p 

1 2 3 4 [root@test ~]# sshpass -p "mypasswd" ssh [email protected] "free -m"                 total        used        free      shared  buff/cache   available Mem:          96405       27168       12584        4066       56652       63777 Swap:           126          19         107  

注:生产环境不要使用这种方式,不安全

(3)使用 -e

1 2 3 4 5 6 7 [root@test ~]# export SSHPASS="mypasswd" [root@test ~]# echo $SSHPASS mypasswd [root@test ~]# sshpass -e ssh [email protected] "free -m"               total        used        free      shared  buff/cache   available Mem:          96405       27209       12561        4066       56634       63735 Swap:           126          19         107  

当然,这种方式只针对当前shell有用,如果要配置永久生效,请修改/etc/profile文件

(4)sshpass、ssh都支持多命令调用,只要在命令之间使用&&号就行。

1 2 3 4 5 6 7 8 [root@test ~]# sshpass -e ssh -l root -o 'StrictHostKeyChecking no' 192.168.4.50  ls /home && free -m hadoop mysql yjt zbc               total        used        free      shared  buff/cache   available Mem:            977         364          95          49         518         366 Swap:          4095          35        4060

  

3、如果想要远程机器调用本地脚本,那么可以如下实现

(1)ssh方式

1 2 [root@test ~]# ssh -l root -o 'StrictHostKeyChecking no' 192.168.4.50 bash -s < test46.sh runstone.com

(2)sshpass方式

1 2 [root@test ~]# sshpass -e ssh -l root -o 'StrictHostKeyChecking no' 192.168.4.50 bash -s < test46.sh runstone.com

4、支持sudo

      有些命令需要权限才行,当不想重复输入密码的时候,可以通过这种方式。

(1)格式:cmd ---> 'echo password | sudo -S cmd'

         eg:

1 [root@test ~]# sshpass -p 123456 ssh  -o 'StrictHostKeyChecking no' [email protected]  'echo 123456 | sudo -S  mkdir /backup'

  注:-S的意思是从标准输入读取密码

      对于echo,dd等命令,可能会出现权限不够问题,如:

1 2 [root@test ~]# sshpass -p 123456 ssh  -o 'StrictHostKeyChecking no' [email protected]  'echo 123456 | sudo -S  echo hello > /backup/file' bash/backup/file: Permission denied

       对于上述方式,解决办法如下:

(2)格式:cmd ---> 'echo password | sudo -S  sh/bash -c "cmd"'

         eg:

1 root@test ~]# sshpass -p 123456 ssh  -o 'StrictHostKeyChecking no' [email protected]  'echo 123456 | sudo -S bash -c "echo hello > /backup/file"'

标签:no,SSH,sshpass,test,yes,StrictHostKeyChecking,root,ssh
From: https://www.cnblogs.com/kn-zheng/p/17448752.html

相关文章

  • VirtualBox配置kali 让宿主机可以SSH远程登录虚拟机 vb真难用啊 粘贴板双向死活配置不
    补充:kali里两个虚拟机之间互相访问设置就只需要设置下桥接网络就行!kali里: sudovi/etc/network/interfacesautoeth0ifaceeth0inetdhcp  kali里下载ssh服务包apt-getinstallssh打开ssh服务1servicesshstart打开ssh服务==》开启下!2servicesshstatus查看状......
  • git 使用ssh连接Github:017
    1.首先打开GitBash终端,生成私钥和公钥:ssh-kengen第一步提示:生成的密钥你要放在哪里?这里有给出默认地址,当然你也可以自己设置一个地址,如果不设置,直接回车就行 第二步提示:你要不要给你当前的密钥去设置一个密码?其实这一步没必要去设置,回车就行 第三步提示:提示你输入确认......
  • dnscapy使用——本质上是建立ssh的代理(通过dns tunnel)
    gitclonehttps://github.com/cr0hn/dnscapy.giteasy_installScapy服务端:pythondnscapy_server.pya.friendsxxx.com45.77.39.xxx客户端:ssh-oProxyCommand="sudopythondnscapy_client.pya.friendsxxx.com45.77.39.xxx"[email protected]其中:a.friendsxxx.com是......
  • go 执行ssh 报错ssh: handshake failed: read tcp xxx:->xxx:22: read: connection re
    需求:解决报错go执行ssh报错ssh:handshakefailed:readtcpxxx:->xxx:22:read:connectionresetbypeer 10个以内,没有问题。10以上就报错解决:我的远程(192.168.49.171)服务器ssh默认最大限制10解除限制,下面的操作都是在49.171上操作的。1.编辑sshd_confi......
  • SSH协议-漏洞渗透挖掘
     ......
  • SSH公钥配置-Github
    配置SSH,拉取远程git仓库代码1.查看~/.ssh目录是否存在,如果存在,则说明已存在SSHKey,跳到第3步2.生成公钥文件~/.ssh目录不存在时,执行如下命令:ssh-keygen-trsa-C"[email protected]",接下来一直回车即可。如果要指定公钥名称,例如:ssh-keygen-trsa-C"[email protected]"-f~/.s......
  • 源码编译安装openssh 最新版
    #创建几个目录备用mkdir-p/usr/local/zlib/mkdir-p/usr/local/openssl/mkdir-p/usr/local/openssh/ #安装编译需要用到的依赖包yum-yinstallwgetdnfvimgccgcc-c++makeperlpam-devel #下载相关源码包cd/rootwgethttps://ftp.openbsd.org/pub......
  • hj_podman_jenkins_maven_git_springboot_ssh一键部署项目
    podmanpulljenkins/jenkins:jdk17podmanrun-d--privileged=true\-uroot--namejenkins_jdk17_8081\-p8081:8080-p50001:50000\-v/hj_files/jenkins_jdk17:/var/jenkins_home\a307650508c6http://105.35.260.230:8081/ 安装好推荐配置后.再安装俩插件  Mave......
  • Ansible 安装与ssh密钥配置
    环境系统IP名称CentOS7.610.22.86.71管理机CentOS7.610.22.86.72被控机CentOS7.610.22.86.73被控机CentOS7.610.22.86.74被控机安装#yum源[root@localhost~]#cat/etc/yum.repos.d/epel.repo[epel]name=ExtraPackagesforEnterpriseLi......
  • ssh免密码登录远程服务器
    应该有很多种方法,介绍一种只需要两步骤就能完成的方法:1、在自己的Linux系统上生成SSH密钥和公钥打开终端,使用下面的ssh-keygen来生成RSA密钥和公钥.-t表示type,就是说要生成RSA加密的钥匙.ssh-keygen-trsa2、将SSH公钥上传到Linux服务器可以使用ssh-copy-id命令来完成.ssh-cop......