ssh自动输入密码自动登录

  • 如果是密钥登录的话还比较好自动登录,如果是密码登录的话一般用expect,还可以使用sshpass

expect

  • expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。形象的说,ssh登录,ftp登录等都符合交互的定义。下文我们首先提出一个问题,然后介绍基础知四个命令,最后提出解决方法。

  • expect中最关键的四个命令是send,expect,spawn,interact。

    • send:用于向进程发送字符串
    • expect:从进程接收字符串
    • spawn:启动新的进程
    • interact:允许用户交互
  • 如果没有expect,可以先安装,Ubuntu安装命令如下:

sudo apt install expect
  • centos
yum  install expect
  • 自动登录脚本auto-login.exp
#!/usr/bin/expect
set timeout 102
set user [lindex $argv 0] 
set ip [lindex $argv 1]
#set password [lindex $argv 2]
set password 123456
spawn ssh  -o "ProxyCommand=nc -x 127.0.0.1:1080 %h %p"   -o "ServerAliveInterval=10"  $user@$ip
#spawn ssh     -o "ServerAliveInterval=10"  $user@$ip
expect {
"yes/no" {send "yes\r"; exp_continue}
"password:" {send "$password\r"}
}
interact

  • 注意我这里用了代理登录的-o "ProxyCommand=nc -x 127.0.0.1:1080 %h %p" 看自己情况需不需要这个参数; -o "ServerAliveInterval=10" 是发心跳间隔时间多少秒。
  • 下面的expect yes/no 如果出现了yes/no就输入yes\r ;同理如果出现了password:就输入自己的密码加\r
  • 使用
expect auto-login.exp 用户名  ip

在这里插入图片描述

sshpass

  • Ubuntu安装
sudo apt install sshpass
  • centos/redhat安装
yum install sshpass
  • 源码安装
 wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
 tar -xvf sshpass.tar.gz
 cd sshpass-1.06
 ./configure
sudo make install 
  • 这个命令也非常舒服sshpass+ssh
 sshpass -p 'xxxxxx'  ssh -o ProxyCommand="nc -X 5 -x 127.0.0.1:1080 %h %p" -o ServerAliveInterval=60  root@xx.xx.xx.xx
  • -p 参数传入密码
  • 我加了代理的,加不加视情况而定
    在这里插入图片描述

posted on 2020-02-16 17:16  愤怒的苹果ext  阅读(265)  评论(0编辑  收藏  举报

导航