ssh登录 编写linux脚本_linux编写脚本ssh登录 - CSDN
  • 最近租用了腾讯云的服务器,在Linux虚拟机下使用ssh命令登录很方便,但每次都要输密码,虽然也可以使用密钥免密登录,但这样不知为何使用scp命令又出现了一些问题,所以我想写一个脚本命令,直接运行登录。...
    • 最近租用了腾讯云的服务器,在Linux虚拟机下使用ssh命令登录很方便,但每次都要输密码,虽然也可以使用密钥免密登录,但这样不知为何使用scp命令又出现了一些问题,所以我想写一个脚本命令,直接运行登录。

    准备

    安装expect,这是一个类似于bash的工具,需要额外安装
    sudo apt-get install expect

    编写脚本

    #SSH登录我的服务器
    #下一行表示使用expect包
    #!/bin/expect
    set timeout 30 #这个是设定超时时间
    spawn ssh ubuntu@127.0.0.1 #执行ssh命令,我理解spawn为关键字;用户名和地址当然要根据实际情况填啦
    expect "password:" #这个我的理解是“期望”这样的表达,因为ssh登录后要密码的格式就是这样的,如果格式不对会让你手动输入密码
    send "12345678\n" #这里是密码
    interact #表示执行完留在远程控制台,否则会直接返回本地控制台 
    exit
    

    运行

    执行expect + 脚本名

    如:expect ssh.sh

    亲测可以运行,十分方便,如果运行不了:

    • 确认设定了正确的 ip地址、用户名、密码
    • 删除一些注释,有些行后面似乎不能带注释

    免密码登录

    2020年更新
    这里还有一种更简单,也更原生的方法
    使用 ssh-keygen命令生成本机的rsa公钥,一般保存在~/.ssh/id_rsa.pub中,将其拷贝到服务器的~/.ssh/authorized_keys中,那么直接使用ssh命令登录远程服务器时将不再需要输入密码,scp命令也可以免密码使用,现在我更推荐用这种方法,但是使用expect解决问题的思路还是值得学习的

    参考资料

    https://blog.csdn.net/wuanwujie/article/details/71158526

    展开全文
  • 该文件用来保存用户的ssh链接信息 新建文件password.lst,然后添加如下内容 序号:IP:端口:用户:密码:说明 1:123.56.10.38:22:username:password:阿里云测试服务器 2:192.168.88.130:22:ca0gu...

    1.安装必要软件expect

    sudo apt install expect

    2.书写配置文件password.lst

    该文件用来保存用户的ssh链接信息

    新建文件password.lst,然后添加如下内容

    序号:IP:端口:用户:密码:说明

    1:123.56.10.38:22:username:password:阿里云测试服务器
    2:192.168.88.130:22:ca0gu0:toor:虚拟机mysql数据库服务器

    3.新建入口脚本文件manager.sh

    #!/bin/bash
    
    direc=`dirname $0`
    function color(){
        blue="\033[0;36m"
        red="\033[0;31m"
        green="\033[0;32m"
        close="\033[m"
        case $1 in
            blue)
                echo -e "$blue $2 $close"
            ;;
            red)
                echo -e "$red $2 $close"
            ;;
            green)
                echo -e "$green $2 $close"
            ;;
            *)
                echo "Input color error!!"
            ;;
        esac
    }
    
    function copyright(){
        echo "#####################"
        color blue "   SSH Login Platform   "
        echo "#####################"
        echo
    }
    
    function underline(){
        echo "-----------------------------------------"
    }
    
    function main(){
    
    while [ True ];do
    
    
        echo "序号 |       主机      | 说明"
        underline
        awk 'BEGIN {FS=":"} {printf("\033[0;31m% 3s \033[m | %15s | %s\n",$1,$2,$6)}' $direc/password.lst
        underline
        read -p '[*] 选择主机: ' number
        pw="$direc/password.lst"
        ipaddr=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $2}}' $pw)
        port=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $3}}' $pw)
        username=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $4}}' $pw)
        passwd=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $5}}' $pw)
    
        case $number in
            [0-9]|[0-9][0-9]|[0-9][0-9][0-9])
                echo $passwd | grep -q ".pem$"
                RETURN=$?
                if [[ $RETURN == 0 ]];then
                    ssh -i $direc/keys/$passwd $username@$ipaddr -p $port
                    echo "ssh -i $direc/$passwd $username@$ipaddr -p $port"
                else
                    expect -f $direc/ssh_login.exp $ipaddr $username $passwd $port
                fi
            ;;
            "q"|"quit")
                exit
            ;;
    
            *)
                echo "Input error!!"
            ;;
        esac
    done
    }
    
    copyright
    main

    4.新建ssh_login.exp脚本文件

    #!/usr/bin/expect -f
    set TARGET [lindex $argv 0]
    set USER [lindex $argv 1]
    set PASSWD [lindex $argv 2]
    set PORT [lindex $argv 3]
    set timeout 10
    
    spawn ssh $USER@$TARGET -p $PORT
    expect {
        "*yes/no" {send "yes\r"; exp_continue}
        "*password:" {send "$PASSWD\r"}
    }
    interact

    5.运行

    ./manager.sh

    6.将该目录添加到环境变量

    编辑~/.profile

    展开全文
  • Shell脚本学习(二)制作SSH登录远程服务器的Shell脚本

    Shell脚本学习(二)制作SSH登录远程服务器的Shell脚本

    Ubuntu环境需要安装expect安装包

    sudo apt-get install expect

    使用shell脚本自动ssh登录远程服务器

    login.sh

    #!/usr/bin/expect -f
    # 设置ssh连接的用户名
    set user liuben
    # 设置ssh连接的host地址
    set host 10.211.55.4
    # 设置ssh连接的port端口号
    set port 9999
    # 设置ssh连接的登录密码
    set password admin
    # 设置ssh连接的超时时间
    set timeout -1
    
    spawn ssh $user@$host -p $port
    expect "*password:"
    # 提交密码
    send "$password\r"
    # 控制权移交
    interact
    # 确定login.sh脚本有可执行权限
    chmod +x login.sh
    # 执行login.sh脚本
    ./login.sh
    
    # 注意
    不能按照习惯来用sh login.sh来这行expect的程序,会提示找不到命令,如下:
    
    login.sh: line 3: spawn: command not found
    couldn't read file "*password:": no such file or directory
    login.sh: line 5: send: command not found
    login.sh: line 6: interact: command not found
    
    因为expect用的不是bash所以会报错。因为bash和expect的脚本指定了不同的脚本解释器
    #!/usr/bin/expect -f
    #!/bin/bash
    执行的时候直接./login.sh就可以了。~切记!

    参考文章:

    展开全文
  • shell脚本实现ssh自动登录, 里面有些注释掉的是编写时遇到的一些问题和调试信息 代码如下: fwqs_ssh.sh 脚本内容, 说明: LOGIN_FWQ: 登录账户名 LOGIN_FWQ_IP: 登录IP LOGIN_FWQ_PW: 登录密码 LOGIN_...

    功能:

    shell脚本实现ssh自动登录, 里面有些注释掉的是编写时遇到的一些问题和调试信息

    说明:

    LOGIN_FWQ: 登录账户名

    LOGIN_FWQ_IP: 登录IP

    LOGIN_FWQ_PW: 登录密码

    代码如下:

    fwqs_ssh.sh 脚本内容,

    LOGIN_FWQ=xcz
    LOGIN_FWQ_IP=192.168.1.158
    LOGIN_FWQ_PW=123
    ./_fwq_ssh-login_v2.sh $LOGIN_FWQ $LOGIN_FWQ_IP $LOGIN_FWQ_PW

    _fwq_ssh-login_v2.sh 脚本内容

    #!/usr/bin/expect
    
    #send_user "argc: $argc\n"
    if {$argc != 3} {
    	send_user "argc: $argc\n"
    	send_user "usage:\n"
    	send_user "	./_fwq_ssh-login_v2.sh \$user \$ip \$pw\n"
    	exit
    }
    
    set LOGIN_FWQ [lindex $argv 0]
    set LOGIN_FWQ_IP [lindex $argv 1]
    set LOGIN_FWQ_PW [lindex $argv 2]
    
    spawn ssh $LOGIN_FWQ@$LOGIN_FWQ_IP
    
    #expect "password: "
    #==> compatible is not good
    
    ### 密码错误时,不会自动再次输入
    #expect "assword"
    #send "$LOGIN_FWQ_PW\n"
    
    ### 密码错误时,自动再次输入-1
    ### issue 等待时间timeout
    #expect "assword" {
    #	send "$LOGIN_FWQ_PW\n"
    #	exp_continue
    #}
    
    ### 密码错误时,自动再次输入-2
    expect {
    	"assword" {
    		send "$LOGIN_FWQ_PW\n"
    		exp_continue
    	}
    
    # no use -->why ???s
    #	"again" {
    #		send_user "====================================\n"
    #		exp_continue
    #	}
    
    ### 防止等待时间timeout
    ### 无\n, or is too much
    	"$LOGIN_FWQ" {
    		send_user "Success login"
    	}
    }
    
    interact
    展开全文
  • 1.准备测试脚本 /test.sh #!/bin/sh echo 'Hello World' 2.导入maven依赖 1 dependency> 2 groupId>org.jvnet.hudsongroupId> 3 artifactId>ganymed-ssh2artifactId> 4 version>build210-hudson-1v
  • Linux shell脚本基础学习  本文主要介绍shell脚本编写的基础语法,开头、注释、变量和 环境变量,虽然不涉及具体东西,但打好基础确是最为关键的。 1. shell脚本编写初步介绍 1.1 开头程序必须以下面的...
  • 一、编写脚本 vim 26.sh #!/usr/bin/expect set timeout 1 spawn ssh root@10.0.0.26 expect "*password*" send "password\r" send "sudo -s\r" send "cd /usr/local/\r" interact 二、修改权限 sudo chmod +x ./...
  • 文章目录一、准备二、编辑内容三、执行 一、准备 本教程是在ubuntu环境下,centos同样使用,只是安装expect命令有所不同 安装工具包:sudo apt-get install ...编写脚本文件内容,达到自动连接远程服务器的目的 g
  • SSH 免密登录 Shell 自动化脚本 脚本下载地址 场景分析 在我们日常工作中,经常面对几十台上百台服务器这样的环境,使用诸如ansible或者puppet这样的自动化运维工具则显得太过笨重和繁琐,并且最终的效果可能还不如...
  • 有时服务器无法给个人配置ssh秘钥,而服务器密码有复杂。利用交互式任务来实现一键登录是非常方便的。...编写登录脚本 sudo vim /opt/script_ssh.sh #!/usr/bin/expect set timeout 20 set password "yourpas...
  • 根据前2节的详细说明,那么将其作为一个脚本是非常简单的事情。 [1] LinuxSSH免密登陆之一 基础解析 [2] LinuxSSH免密登陆之二 配置无效解析 主要思路 判断本地的id_rsa和id_rsa.pub是否已经生成,没有ssh-...
  • 使用 expect 进行操作: #!/usr/bin/expect set port 22 set user XXX set host XXX set password XXX ...spawn ssh -D $port $user@$host expect {  "(yes/no)" { send "yes\r"; exp_continue
  • shell脚本中执行ssh

    2018-11-23 13:44:39
    公司开发使用docker,每次登陆自己开发机总要输入 ssh user_name@ip_string,然后再确认输入password,手快了还经常会输错。作为一个懒人,肯定要找一个取巧的方式,查看了下ssh命令,由于它要进行一次跟服务器的...
  • 文章目录一、服务器系统配置初始化1.... 禁止root远程登录脚本编写脚本说明6. 禁止定时任务发送邮件① 脚本编写脚本说明7. 设置最大打开文件数① 脚本编写脚本说明8. 较少Swap使用① 脚本编写脚本说明9....
  • ssh 自动登录脚本

    2016-03-17 17:16:06
    一、脚本如下: #!/usr/bin/expect -f set timeout -1 spawn ssh root@10.10.2.1 expect "password:" send "123456\r" expect "*#" send "cd /home/tmp \r" expect "*#" send "touch a.txt \r" expect "*#" send ...
  • windows上需要的配置 1. 先安装git 到https://gitforwindows.org/上面下载安装包,并安装 2. 到用户目录创建.ssh文件夹 进入到C:\Users\admin,新建.ssh文件夹(admin是用户名,不同的用户名...3. 生成ssh公钥 ...
  • 由于每次都要从中转的Linux服务器上链接到其它Linux服务器,每次都需要输入长串的ssh命令。并且还要重复输入用户名和密码,很繁琐。因此整理脚本,简化为每次只要输入主机ip即可自动登录! 第一.先要安装expect的...
  • 原文链接:... 使用VPN,每次都要在Terminal上重复输入命令: ssh -D port user@host ...   终于忍受不了这样的重复了,于是用Shell写一个可以自动登录脚本: Shell script代码 ...
  • ssh远程执行脚本

    2020-07-30 23:31:54
    1、可同时在多台Linux执行同一个指令。 2、主节点需要与其它节点配置免密。 3、脚本简单,请先测试.(sh ssh_do_command.sh "ls")
  • 分享一个ssh打通的脚本,经过测试可用。目前只能单向打通,且要求本地用户名为admin(写入代码,可简单修改)。本身只是个人使用,故通用性、异常情况考虑不多,大家可以做个参考。 补充一点,Important Tip: ...
1 2 3 4 5 ... 20
收藏数 22,317
精华内容 8,926
关键字:

ssh登录 编写linux脚本