Shell登陆远程服务器

  现场服务器较多,密码3个月过期,在到期时需更改密码。

  使用expect编写,尝试登陆2次后退出(防止密码错误时账号锁定),超时重试一次。

  shell脚本调用并定时执行,登陆成功后执行一条命令,如:hostname、uname等,根据退出状态判断密码是否到期。

  0--正常

  1--传入参数错误

  2--timeout

  3--密码错误或到期

  脚本如下: 

#!/usr/bin/expect

###############################################################
# 连接远程主机
proc do_login {passwd} {
    set timeout 30
    set done 1
    set timeout_case 0
    set ps1 {PS1="doraemon#";export PS1}
    while {$done<3} {
        expect {
            *assword* {
                send $passwd\r
                incr done
            }
            \[$%>#] {
                set done 5
                send $ps1\r\r
                break
            }
            timeout {
                set done 1
                switch -- $timeout_case {
                    1 { send_user "try again ...\n" }
                    2 { exit 2
                        expect eof
                    }
                }
                incr timeout_case
            }
        }
    }
    if {$done==3} {
        exit 3
        expect eof
    }
}
###############################################################
# 执行命令
proc exec_cmd {cmd} {
    expect -re "doraemon#$"
    send_user "\$cmd: $cmd\n"
    send $cmd\r
}
###############################################################
# 退出
proc logout {} {
    expect -re "doraemon#$"
    send exit\r
    expect eof
}
###############################################################
if {$argc < 4} {
    send_user "Usage:$argv0 user pass ip command\n"
    exit 1
}
set user [lindex $argv 0]
set pass [lindex $argv 1]
set ip [lindex $argv 2]
set num 3

spawn ssh -o StrictHostKeyChecking=no -l $user $ip
do_login $pass
while {$num<$argc} {
    set proc [lindex $argv $num]
    # 捕获输出用
    set cmd "echo ==$ip==$user==`$proc`=="
    exec_cmd $cmd
    incr num
}
logout
时间: 2024-10-09 08:34:40

Shell登陆远程服务器的相关文章

Linux上实现ssh免密码登陆远程服务器

0.说明 平常使用ssh登陆远程服务器时,都需要使用输入密码,希望可以实现通过密钥登陆而免除输入密码,从而可以为以后实现批量自动部署主机做好准备. 环境如下: IP地址 操作系统 服务器端 10.0.0.128/24 CentOS 6.5 x86 客户端 10.0.0.129/24 Ubuntu 16.04 x86 1.客户端生成密钥对 生成密钥对: [email protected]:~$ ssh-keygen -t rsa -b 2048 Generating public/private 

登陆远程服务器

登陆远程数据库 1.改为SQL server混合验证模式 登陆时选择服务器类型,每个服务器类型功能侧重点不一样 服务器名称一般默认为本机的具有管理权限的计算机名,也可以用“.”表示.这代表登陆的是自己的服务器 身份验证分为windows验证和SQL server验证(包括用户用和密码,密码不能忘) 一般登陆时默认为windows验证(即计算机同意即可,不用输密码) 如果登陆远程服务器必须先修改身份验证模式,如下图 右击对象资源管理器下面所登陆的服务器名称admin进入属性, 安全性 修改验证模式

Linux 系统免密码登陆远程服务器

在当前Linux生成公钥私钥ssh-keygen公钥私钥存放路径为:~/root/.ssh/id_rsa id_rsa.pub 登陆被远程主机,进入目录~/root/.ssh/是否存在authorized_keys文件,若不存在新建authorized_keys文件将第一步生成的id_rsa.pub文件内容,拷贝到authorized_keys中也可以用命令ssh-copy-id [email protected] ssh远程若不想每次输入Ip地址可修改/etc/hosts文件在hosts文件首

通过expect免自动输入密码登陆远程服务器

1.前提必须已经安装expect 2.新建login.sh,文件内容如下 #!/usr/bin/expect -f spawn ssh [email protected]expect "password:"send "passwordR\r"interact 3.执行./login.sh即可登陆远端服务器

xmanger图形化登陆远程服务器

犹豫网上的资料比较杂,经过本人整理实际操作验证,保证ok  本人的服务器系统为centos5.8 下面的都是centos服务器上的操作,需要简单的配置下: win客户端使用xmanger软件:首先是服务端已经安装了图形化桌面: #yum groupinstall "GNOME Desktop Environment" #yum groupinstall “X Window System” 服务器端开启远程桌面连接的配置: vim /etc/gdm/custom.conf [securi

ssh 无密码登录远程服务器

在讲下文之前,我都默许大家都已经生成了自己的ssh公钥和密钥,在自己的~/.ssh 目录下面,如果没有,请使用 ssh-keygen -t rsa -C "你的邮箱" 命令生成 1,上传自己的公钥到远程主机中 公钥生成后,一般是 ~/.ssh/id_rsa.pub 文件,后面的pub就是public开放的意思,没有pub的就是私钥了 vim ~/.ssh/id_rsa.pub 打开你的公钥文件,复制到远程主机 ~/.ssh/authorized_keys 文件中 authorized_

Git学习--&gt;如何通过Shell脚本自动定时将Gitlab备份文件复制到远程服务器?

一.背景 在我之前的博客 git学习--> Gitlab如何进行备份恢复与迁移? (地址:http://blog.csdn.net/ouyang_peng/article/details/77070977) 里面已经写清楚了如何使用Gitlab自动备份功能.  但是之前的备份功能只是备份到Gitlab服务运行的那台服务器上,如果哪一天那台服务器的磁盘损坏了的话,数据无法取出,那么对于公司来说是一匹无法想象的损失,因为 代码是公司的重要资产,需要以防万一. 代码是公司的重要资产,需要以防万一. 代

自动登录远程服务器shell

#!/usr/bin/expect -f set user username set host ipaddress set password pwd set timeout -1 spawn ssh [email protected]$host expect "*assword:*" send "$password\r" interact chmod +x shellname 使脚本生效 把shell所在路径加入环境变量:http://www.cnblogs.com

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器 作者:赵全文 网名:guestart 我们有一套生产环境的Oracle数据库,虽然每天都有RMAN备份,但是也招架不住开发人员隔三差五就说要恢复几张表的前几天的数据到生产环境当中,针对这样的需求,用RMAN来恢复某几张表的数据就显的特别费劲了.于是我决定用Oracle数据库的逻辑备份工具EXPDP(数据泵导出)专门导出特定用户下的所有表的数据,并在每天凌晨4点通过LINUX操作系统的CRONTAB的计划任务定时执