Linux中ssh实现免密登录

操作系统: Ubuntu18.04
需求背景:shell脚本中需要实现登录到某台机器,但是ssh命令无法实现交互式操作,所以选取sshpass进行操作。


sshpass工具

sshpass 程序旨在使用键盘交互密码身份验证模式运行SSH ,但以非交互方式运行。
SSH使用直接TTY访问来确保密码确实是由交互式键盘用户发出的。sshpass在专用的TTY中运行SSH,让SSH认为它是从交互式用户那里获取密码的。

安装sshpass

$ sudo apt-get install sshpass

使用sshpass

在sshpass选项之后指定要运行的命令。通常,该命令ssh带有参数,但也可以是任何其他命令。不过,目前SSH密码提示已硬编码为sshpass。

sshpass [-f filename | -d num | -p password | -e] [options]

命令选项

-p 密码 密码在命令行中给出。 
-f 文件名 密码是文件名的第一行。 
-d number number是sshpass从运行程序继承的文件描述符。从打开的文件描述符中读取密码。 
-e 密码来自环境变量"SSHPASS"

用于sshpass通过SSH登录到远程服务器。假设用户名和密码都为raypick。以下是使用sshpass选项的几种方法。

1、使用-p(这是最不安全的选择,不应使用):

$ sshpass -p "raypick" ssh raypick@localhost

-p在shell脚本中使用时,该选项如下所示:

$ sshpass -p "raypick" ssh -o StrictHostKeyChecking=no raypick@localhost

2、使用-f选项(密码应该是文件名的第一行):

$ echo'raypick' > pass_file
$ chmod 0400 pass_file
$ sshpass -f pass_file ssh raypick@localhost

-f 在shell脚本中使用以下选项:

$ sshpass -f pass_file ssh -o StrictHostKeyChecking=no raypick@localhost

3、使用-e选项(密码应该是文件名的第一行)

$ SSHPASS='raypick' sshpass -e ssh raypick@localhost

-e在shell脚本中使用时,该选项如下所示:

$ SSHPASS ='raypick' sshpass -e ssh -o StrictHostKeyChecking=no raypick@localhost

sshpass + expect实现交互式shell脚本

安装expect

$ sudo apt-get install expect

下面的代码是交互式ssh登陆机器(我这里登陆的本机,因为没有多余机器)并操作的过程,有需要的可以参考一下。

#!/bin/bash
set -e

host_addr="localhost"
host_name="raypick"
host_password="raypick"

ssh-keygen -R ${host_addr}
/usr/bin/expect <<-END

#set timeout -1
spawn ssh raypick@${host_addr}
expect {
       "yes/no" {send "yes\r";exp_continue}
       "raypick@${host_addr}'s password:" {send "${host_password}\r";exp_continue};
}
expect "raypick@${host_name}"
send "mkdir -p /home/raypick/jars/testexpect\r"
expect "raypick@${host_name}"
send "exit\r"
expect eof
END
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RayCheungQT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值