Linux下非交互式sshpass登录

简介: 摘要 在命令行 非交互的SSH登录的时候,一般我们可以借助于生成用户的公钥私钥对,然后把公钥添加到远程主机的authorized_keys文件,可以实现非交互无密码登录。 其实这里也可以有另外一种方式实现,即用sshpass命令。 这种情况比较适合Mac下用iterm2 SSH登录到远程主机的时候,长时间不操作导致 packet_write_wai

摘要

在命令行 非交互的SSH登录的时候,一般我们可以借助于生成用户的公钥私钥对,然后把公钥添加到远程主机的authorized_keys文件,可以实现非交互无密码登录。

其实这里也可以有另外一种方式实现,即用sshpass命令。

这种情况比较适合Mac下用iterm2 SSH登录到远程主机的时候,长时间不操作导致
packet_write_wait: Connection to 192.168.xxx.xxx port 22: Broken pipe问题的解决办法

安装sshpass

#!/usr/bin/env bash
#coding:    utf-8
#author:    Colin
#date:      2016-12-27
#desc:      install sshpass command 
# 

## download 
cd /tmp

wget http://downloads.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz

## extract
tar -zxvf sshpass-1.06.tar.gz

## compile and install
cd sshpass-1.06

sudo ./configure --prefix=/usr/local/sshpass
Password:
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
...

sudo make install

## cp it into path 
cp /usr/local/sshpass/bin/sshpass /usr/bin/

## verify
sshpass
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -P prompt     Which string should sshpass search for to detect a password prompt
   -v            Be verbose about what you're doing
   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

配置使用

从上面的显示可以看到,sshpass可以使用-p,-f-e参数

Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
  • -p password 直接跟密码
  • -f filename 把密码明文写入到一个文件中通过文件来读取
  • -e 默认从 SSHPASS 系统变量取值,注意是系统变量

举例

使用-p 参数

root@pts/1 $ /usr/bin/sshpass -p 'root' ssh root@192.168.200.23
Warning: Permanently added '192.168.200.23' (ECDSA) to the list of known hosts.
Last login: Tue Dec 27 17:20:58 2016 from 192.168.200.1
apollo-web-test [~] 2016-12-27 20:16:53
root@pts/9 $
apollo-web-test [~] 2016-12-27 20:17:16
root@pts/9 $
apollo-web-test [~] 2016-12-27 20:17:16
root@pts/9 $ exit
登出
Connection to 192.168.200.23 closed.

使用-f参数

QA-DB [/tmp/sshpass-1.06] 2016-12-27 20:17:25
root@pts/1 $ vim /tmp/200.23password
QA-DB [/tmp/sshpass-1.06] 2016-12-27 20:17:33
root@pts/1 $ /usr/bin/sshpass -f /tmp/200.23password ssh root@192.168.200.23
Warning: Permanently added '192.168.200.23' (ECDSA) to the list of known hosts.
Last login: Tue Dec 27 20:16:53 2016 from 192.168.200.9
apollo-web-test [~] 2016-12-27 20:17:52
root@pts/9 $ exit
登出
Connection to 192.168.200.23 closed.

使用-e参数,注意 SSHPASS系统变量

使用非系统变量报错,不能正确执行,如下:

QA-DB [/tmp/sshpass-1.06] 2016-12-27 20:17:54
root@pts/1 $ SSHPASS='root'
QA-DB [/tmp/sshpass-1.06] 2016-12-27 20:18:08
root@pts/1 $ /usr/bin/sshpass -e ssh root@192.168.200.23
sshpass: -e option given but SSHPASS environment variable not set
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -P prompt     Which string should sshpass search for to detect a password prompt
   -v            Be verbose about what you're doing
   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used
QA-DB [/tmp/sshpass-1.06] 2016-12-27 20:18:18

检查系统变量

root@pts/1 $ env |grep -i SSHPASS
PWD=/tmp/sshpass-1.06
QA-DB [/tmp/sshpass-1.06] 2016-12-27 20:19:32

通过export设置系统变量

root@pts/1 $ export SSHPASS='root'
QA-DB [/tmp/sshpass-1.06] 2016-12-27 20:19:41
root@pts/1 $ env |grep -i SSHPASS
PWD=/tmp/sshpass-1.06
SSHPASS=root
QA-DB [/tmp/sshpass-1.06] 2016-12-27 20:19:42

再使用 -e 连接

root@pts/1 $ /usr/bin/sshpass -e  ssh root@192.168.200.23
Warning: Permanently added '192.168.200.23' (ECDSA) to the list of known hosts.
Last login: Tue Dec 27 20:17:52 2016 from 192.168.200.9
apollo-web-test [~] 2016-12-27 20:19:45
root@pts/9 $

执行远程命令

root@pts/1 $ /usr/bin/sshpass -f /tmp/.password/pass200.23 ssh root@192.168.200.23 'ls -l /tmp'
总用量 6196
drwxr-xr-x 3 root       root          4096 1214 21:01 audit-live-log
drwxr-xr-x 7        600        600    4096 1227 17:09 child-code

Mac下iterm2配置定制profile

在Mac下可以定制profile,也就类似windows的xshell下主机的定义,具体如下图:

Paste_Image.png


简书地址:Linux下非交互式sshpass登录



公众号: DailyJobOps

    公众号: DailyJobOps    

目录
相关文章
|
7月前
|
Linux 网络安全
linux免密登录报错 Bad owner or permissions on /etc/ssh/ssh_config.d/05-redhat.conf
linux免密登录报错 Bad owner or permissions on /etc/ssh/ssh_config.d/05-redhat.conf
349 1
|
6月前
|
Ubuntu Linux Shell
github用存在的私钥在Linux上配置免密登录
在Linux上配置GitHub免密登录,使用已有的私钥。系统环境为Ubuntu 22.04.3 LTS。步骤包括:1) 将名为`github`的私钥文件上传至`~/.ssh/github`;2) 设置正确权限`chmod 600 ~/.ssh/github`和`chmod 700 ~/.ssh`;3) 启动SSH代理并添加私钥`ssh-agent -s`和`ssh-add ~/.ssh/github`。完成上述步骤后,可以无缝使用GitHub。
81 0
|
4月前
|
安全 Linux
Linux查看和剔除当前登录用户详细教程
Linux查看和剔除当前登录用户详细教程
149 0
Linux查看和剔除当前登录用户详细教程
|
5月前
|
存储 运维 安全
问题记录:解决Linux登录故障,/etc/passwd配置受损该怎么操作
在维护Linux系统的过程中,可能会遇到各种紧急情况,其中/etc/passwd文件的损坏是运维人员特别需要准备应对的一种情形。该文件作为Linux用户账户信息的核心存储,一旦遭到破坏,会直接导致用户无法登录,甚至系统服务失败。这次处理问题的记录会提供一个详细步骤,以帮助恢复损坏的/etc/passwd文件,从而快速解决登录失败危机。
问题记录:解决Linux登录故障,/etc/passwd配置受损该怎么操作
|
4月前
|
机器学习/深度学习 存储 Linux
【机器学习 Azure Machine Learning】使用VS Code登录到Linux VM上 (Remote-SSH), 及可直接通过VS Code编辑VM中的文件
【机器学习 Azure Machine Learning】使用VS Code登录到Linux VM上 (Remote-SSH), 及可直接通过VS Code编辑VM中的文件
|
4月前
|
存储 Linux 测试技术
在Linux中,如何使用expect进行自动化交互式应用程序测试?
在Linux中,如何使用expect进行自动化交互式应用程序测试?
|
4月前
|
JavaScript Linux API
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
|
4月前
|
监控 安全 Linux
在Linux中,如何查看当前登录用户?
在Linux中,如何查看当前登录用户?
|
4月前
|
安全 Linux Shell
Linux系统之间实现免密码登录(SSH无密码登录
【8月更文挑战第21天】要在Linux系统间实现SSH免密码登录,需先在源机器生成SSH密钥对,然后将公钥复制到目标机器的`.ssh/authorized_keys`文件中。可通过`ssh-keygen`命令生成密钥,并使用`ssh-copy-id`命令传输公钥。最后测试SSH连接,确保能无密码登录。若目标机器缺少相关目录或文件,需手动创建并设置适当权限。完成这些步骤后,即可实现安全便捷的免密码登录。
201 0
|
4月前
|
Ubuntu Linux 网络安全
在Linux中,如何禁用root用户直接SSH登录?
在Linux中,如何禁用root用户直接SSH登录?