ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ssh自动登录实现方法

2021-11-28 02:01:10  阅读:188  来源: 互联网

标签:登录 user send hi 自动 ssh sshpass expect


问题:由于ssh协议不支持从标准输入获取变量,所以在shell脚本中无法实现自动化交互。

解决办法一:使用sshpass,需要在有网的的情况下安装sshpass,这种方法简单易操作。

      首先安装sshpass:yum -y install sshpass

      然后自动化脚本中直接使用:sshpass -p "密码" ssh root@192.168.1.3

解决办法二:使用expect

      expect可以启动新的进程并且可以发送信息到新的进程中执行,expect命令有很多参数使用,下面列举几个常用的,欢迎补充。

expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] 
    选项 
         -c:从命令行执行expect脚本,默认expect是交互地执行的   
               示例:expect -c 'expect "\n" {send "pressed enter\n"}' 
         -d:输出调试信息   
               示例:expect  -d ssh.exp
          expect中的相关命令 
                spawn:启动新的进程 
                send:向进程发送字符串 
                expect:从进程接收字符串 
                interact:允许用户交互
                exp_continue  匹配多个字符串时在执行动作后加此命令 

     expect最常用的语法(tcl语言:模式-动作) 
        单一分支模式的语法: 
               expect "hi" { send "You said hi\n" } 
         匹配到 hi 后,会输出"you said hi",并换行 多分支模式的语法: expect { "hi" { send "You said hi\n" } "hehe" { send “Hehe yourself\n" } "bye" { send "Goodbye\n" } }
         匹配 hi, hehe, bye 中的任意字符串时, 发送相应字符串。等同于:

      使用:

#!/usr/bin/expect
#!/bin/bash

set user "root"
set pass "root"
set machine "192.168.1.3"
#设置expect等待30秒匹配不到再返回
set timeout 30
spawn ssh "$user@$machine" expect { "password" { send "$pass\n" ; #exp_continue; } } expect "$user" send "touch /root/a.txt\n" expect "$user" send "exit\n" expect "$user" #interact expect eof

 

    

 

标签:登录,user,send,hi,自动,ssh,sshpass,expect
来源: https://www.cnblogs.com/yinguojin/p/15614189.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有