MENU

使用脚本自动输入密码登录ssh

• April 9, 2020 • Read: 552 • 教程,源码

使用脚本自动输入密码登录ssh

  • 支持多服务器 ,用shell脚本做选择判断。
  • 支持自己输出密码并登录。
  • 支持Linux、MacOS。

vim ~/sshlogin.exp

expect脚本实现自动化远程登录。

#!/usr/bin/expect -f

set hostname [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
set timeout 30
set force_conservative 1
if {$force_conservative} {
  set send_slow {128 .1}
}
spawn ssh $user@$hostname;
expect {
    "*continue connecting (yes/no)?" { send -s "yes\r"; exp_continue }
    "*assword:" {
        send -s "$passwd\r";
    }
}
interact

[#!/usr/bin/expect]

这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bashwindows下的cmd是一类东西。
注意:这一行需要在脚本的第一行。

2.[set timeout 30]

基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒

3.[spawn ssh -l username hostsname]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.comdir.exe 的可执行文件。
它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

4.[expect "password:"]

这里的expect也是expect的一个内部命令,有点晕吧,expectshell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

5.[send "ispass "]

这里就是执行交互动作,与手工输入密码的动作等效。
温馨提示: 命令字符串结尾别忘记加上 “\r”,如果出现异常等待的状态可以核查一下。

6.[interact]

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为[expect eof]

vim ~/sshlogin.sh

支持多服务器 ,用shell脚本做选择判断。

#!/bin/bash

clear
RED='\033[0;31m'
GRN='\033[0;32m'
BLU='\033[0;34m'
NC='\033[0m'

pwdpath=$(cd "$(dirname "$0")";pwd)
ssh="expect $pwdpath/sshlogin.exp"

# menu.sh

echo "--------------------------------------"
echo "|        _____   _____   _   _       |"
echo "|       /  ___/ /  ___/ | | | |      |"
echo "|       | |___  | |___  | |_| |      |"
echo "|       \___  \ \___  \ |  _  |      |"
echo "|        ___| |  ___| | | | | |      |"
echo "|       /_____/ /_____/ |_| |_|      |"
echo "--------------------------------------"

echo "--------------------------------------"
echo "please enter your Server:"
echo -e "(1) ${GRN}Linux Aliyun Shen ZHen${NC}"
echo "(2) Linux Aliyun  Hong kong"
echo "(3) Linux QNUS   Los Angeles"
echo "(4) exit"
echo "--------------------------------------"
read -p "请选择服务器:" input

case ${input} in
    1)
    echo -e "${GRN}Linux Aliyun Shen ZHen${NC}"
    $ssh 127.0.0.1 root passwd
        sleep 1;;
    2)
   echo -e "${GRN}Linux Aliyun Hong Kong${NC}"
    $ssh 127.0.0.1 root passwd
    sleep 1;;
    3)
    echo "Linux QN Los Angeles"
    $ssh 127.0.0.1 root passwd
    sleep 1;;
    4)
    exit;;
esac

参考文献:

http://www.jb51.net/article/72609.htm
http://www.cnblogs.com/Javame/p/4281637.html
http://www.linuxidc.com/Linux/2014-02/96262.htm
http://blog.csdn.net/zhuying_linux/article/details/6657020
http://www.cnblogs.com/iloveyoucc/archive/2012/06/25/2561179.html

您的大名:
万水千山总是情,给个打赏行不行。 打赏
- - - The END - - -
  • 文章标题:使用脚本自动输入密码登录ssh
  • 文章链接:https://gxusb.com/109.html
  • 版权所有:本文版权归Get-林林小窝 所有,转载请注明出处!除特殊注明外(如有侵权,请联系 gxggxl@qq.com ),本站原创内容均采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可
  • 广而告之

    Last Modified: April 17, 2020
    Archives QR Code
    QR Code for this page
    Tipping QR Code