https://www.cnblogs.com/klb561/p/11013774.html

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 root@192.168.0.235 "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 root@192.168.0.235 "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 hduser@192.168.0.235 "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' yjt@192.168.4.50  'echo 123456 | sudo -S  mkdir /backup'

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

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

1
2
[root@test ~]# sshpass -p 123456 ssh  -o 'StrictHostKeyChecking no' yjt@192.168.4.50  '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' yjt@192.168.4.50  'echo 123456 | sudo -S bash -c "echo hello > /backup/file"'

[转帖]SSH交互式脚本StrictHostKeyChecking选项 benchmode=yes的更多相关文章

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

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

  2. [转帖]自动交互式脚本--expect

    自动交互式脚本--expect https://www.cnblogs.com/zhuiluoyu/p/4873869.html 我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器 ...

  3. 20181225-Linux Shell Bash环境下自动化创建ssh互信脚本

    20181225-Linux Shell Bash环境下自动化创建ssh互信脚本 1. 我的Blog 博客园 https://www.cnblogs.com/piggybaba/ 个人网站 http: ...

  4. ansible api 调用出现ssh交互式输入

    发现在删掉 ~/.ssh/know_hosts 之后运行 ansible api 会出现以下提示 The authenticity of host '10.1.*.* (10.1.*.*)' can' ...

  5. TCL自动化之SSH交互式

    目前ssh工具很多,但是能够轻松运用到自动化脚本中,可以轻松适配任何环境,满足ssh交互式登录的tcl工具包很少 下面是个人在tcl自动化过程中比较满意的一款自动化脚本 通过使用管道方式分装plink ...

  6. shell脚本分为三类:登录脚本、交互式脚本、非交互式脚本

    shell脚本分为三类:登录脚本.交互式脚本.非交互式脚本 一. 登录脚本类似于windows下的计算机设置中的登录脚本和账户设置下的登录脚本的合集(我是这么理解的哈). 其配置文件的关键词为pref ...

  7. 自动交互式脚本--expect

    我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器,然后进行某项工作.这很平常,但是如果把这个工作自动化进行,你就需要一个程序能自动做你要告诉机器的事情,这样,我们的expect就 ...

  8. [转帖]SSH命令总结

    SSH命令总结 ssh-keygen ssh-copy-id 等命令自己用过 但是知道的不系统 也知道 转发命令 但是也只是知道一点点... ttps://www.cnblogs.com/chenfa ...

  9. ssh 互通脚本

    实现了 主机到指定机器的ssh免密码登录. 若要实现互通, 则在机器列表的每台机器上执行该脚本. 192.168.1.22 root test 192.168.1.25 root test 192.1 ...

  10. expect实现交互式脚本

    #!/usr/bin/expect -f ##告诉解释器用expect来解释 set timeout 6 ##设置超时时间 ] ## 这个是传递给脚本的第一个参数,并把参数赋值给user ] ## 这 ...

随机推荐

  1. HDU 6203 ping ping ping 最近公共祖先 树状数组

    原题链接 题意 给我们一棵n+1节点,n条边的树,然后给我们p条路径(每条路径给出两个端点).我们需要从树上选出一些点,使得每条路径都至少包含我们选出的一个点.求最少选多少点. 思路 以1为根,我们可 ...

  2. Typecho 反向代理 http 访问强制启用生成 https 链接

    问题描述 微酷是使用Nginx反向代理内网的Typecho站点,为了效率内网访问不需要使用https,这样Typecho接收到的请求是http协议的,于是网站内部资源链接被修改成了http. 解决方案 ...

  3. 关于GaussDB(DWS)的正则表达式知多少?人人都能看得懂的详解来了!

    摘要:GaussDB(DWS)除了支持标准的POSIX正则表达式句法,还拥有一些特殊句法和选项,这些你可了解?本文便为你讲解这些特殊句法和选项. 概述 正则表达式(Regular Expression ...

  4. 华为云发布CodeArts Req需求管理工具,让需求管理化繁为简

    摘要:华为云正式发布CodeArts Req,这是一款自主研发的软件研发管理与团队协作工具,旨在助力企业大规模研发转型成功,释放组织生产力. 本文分享自华为云社区<华为云发布CodeArts R ...

  5. 云小课 | 使用ROMA API,API管理从此不用愁!

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:ROMA API致 ...

  6. 数据探索神器:火山引擎 DataLeap Notebook 揭秘

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景介绍 Notebook 解决的问题 部分任务类型(python.spark等)在创建配置阶段,需要进行分步调试 ...

  7. 火山引擎 ByteHouse:两个关键技术,揭秘 OLAP 引擎中的数据导入技术

      更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 数据导入是衡量 OLAP 引擎性能及易用性的重要标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率. ...

  8. Mongodb--用户/权限

    mongodb分为管理员用户和普通用户,并且还有个验证库,建立用户时use到的库(验证库),信息就存储在admin数据库下. 在使用用户时,要加上验证库才能登录,对于管理员用户,必须在admin下创建 ...

  9. .NET使用QuestPDF高效地生成PDF文档

    前言 在.NET平台中操作生成PDF的类库有很多如常见的有iTextSharp.PDFsharp.Aspose.PDF等,今天我们分享一个用于生成PDF文档的现代开源.NET库:QuestPDF,本文 ...

  10. POJ - 1113 Wall (凸包模板) Graham Scan 算法实现

    Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...