【转】sshpass:一个很棒的免交互 SSH 登录工具,但不要用在生产服务器上

译自:http://www.tecmint.com/sshpass-non-interactive-ssh-login-shell-script-ssh-password/作者: Aaron Kili
原创:LCTT https://linux.cn/article-8086-1.html译者: geekpi

在大多数情况下,Linux 系统管理员使用 SSH 登录到程 Linux 服务器时,要么是通过密码,要么是无密码 SSH 登录[1]或基于密钥的 SSH 身份验证。

如果你想自动在 SSH 登录提示符中提供密码和用户名怎么办?这时 sshpass 就可以帮到你了。

sshpass 是一个简单、轻量级的命令行工具,通过它我们能够向命令提示符本身提供密码(非交互式密码验证),这样就可以通过 cron 调度器[2]执行自动化的 shell 脚本进行备份。

ssh 直接使用 TTY 访问,以确保密码是用户键盘输入的。 sshpass 在专门的 tty 中运行 ssh,以误导 ssh 相信它是从用户接收到的密码。

重要:使用 sshpass 是最不安全的,因为所有系统上的用户在命令行中通过简单的 “ps” 命令就可看到密码。因此,如果必要,比如说在生产环境,我强烈建议使用 SSH 无密码身份验证[3]。

在 Linux 中安装 sshpass

在基于 RedHat/CentOS 的系统中,首先需要启用 EPEL 仓库[4]并使用 yum 命令[5]安装它。

# yum install sshpass
# dnf install sshpass    [Fedora 22 及以上版本]

在 Debian/Ubuntu 和它的衍生版中,你可以使用 apt-get 命令[6]来安装。

$ sudo apt-get install sshpass

另外,你也可以从最新的源码安装 sshpass,首先下载源码并从 tar 文件中解压出内容:

$ 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

如何在 Linux 中使用 sshpass

sshpass 与 ssh 一起使用,使用下面的命令可以查看 sshpass 的使用选项的完整描述:

$ sshpass -h

下面为显示的 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
-h            Show help (this screen)
-V            Print version information
At most one of -f, -d, -p or -e should be used

正如我之前提到的,sshpass 在用于脚本时才更可靠及更有用,请看下面的示例命令。

使用用户名和密码登录到远程 Linux ssh 服务器(10.42.0.1),并检查文件系统磁盘使用情况[7],如图所示。

$ sshpass -p ‘my_pass_here‘ ssh [email protected] ‘df -h‘

重要提示:此处,在命令行中提供了密码,这是不安全的,不建议使用此选项。

sshpass – 使用 SSH 远程登录 Linux

但是,为了防止在屏幕上显示密码,可以使用 -e 标志,并将密码作为 SSHPASS 环境变量的值输入,如下所示:

$ export SSHPASS=‘my_pass_here‘
$ echo $SSHPASS
$ sshpass -e ssh [email protected] ‘df -h‘

sshpass – 在终端中隐藏密码

注意:在上面的示例中,SSHPASS 环境变量仅用于临时目的,并将在重新启动后删除。

要永久设置 SSHPASS 环境变量,打开 /etc/profile 文件,并在文件开头输入 export 语句:

export SSHPASS=‘my_pass_here‘

保存文件并退出,接着运行下面的命令使更改生效:

$ source /etc/profile

另外,也可以使用 -f 标志,并把密码放在一个文件中。 这样,您可以从文件中读取密码,如下所示:

$ sshpass -f password_filename ssh [email protected] ‘df -h‘

sshpass – 在登录时提供密码文件

你也可以使用 sshpass 通过 scp 传输文件[8]或者 rsync 备份/同步文件[9],如下所示:

------- Transfer Files Using SCP -------
$ scp -r /var/www/html/example.com --rsh="sshpass -p ‘my_pass_here‘ ssh -l aaronkilik" 10.42.0.1:/var/www/html
------- Backup or Sync Files Using Rsync -------
$ rsync --rsh="sshpass -p ‘my_pass_here‘ ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

更多的用法,建议阅读 sshpass 的 man 页面,输入:

$ man sshpass

在本文中,我们解释了 sshpass 是一个非交互式密码验证的简单工具。 虽然这个工具可能是有帮助的,但还是强烈建议使用更安全的 ssh 公钥认证机制。

请在下面的评论栏写下任何问题或评论,以便可以进一步讨论。



作者简介:Aaron Kili 是一位 Linux 和 F.O.S.S 爱好者,未来的 Linux 系统管理员,web 开发人员, 还是 TecMint 原创作者,热爱电脑工作,并乐于分享知识。

原文地址:https://www.cnblogs.com/cxt-janson/p/10818573.html

时间: 2024-07-31 01:06:34

【转】sshpass:一个很棒的免交互 SSH 登录工具,但不要用在生产服务器上的相关文章

sshpass 一个免交互式ssh登录工具

centos 下面使用yum方式安装sshpass 远程登录其他机器执行命令,之前一直用export 脚本的方式.现在感觉用这个更加方便一点,但是不安全,不建议在生产环境中使用此命令! 安装epel源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum install sshpass -y 命令使用: sshpass  -p 'password' ssh [email protecte

脚本化自动构建openstack计算节点间免密码ssh登录

openstack 实例的调整大小和移植功能,都要求计算节点间免密码ssh登录,对于已有的计算节点和新增的计算节点,如何简单快速的使它们之间能够互相两两免密码登录,博主给出了一套实用的脚本. 可先参考脚本化自动部署openstack一文,搭建好环境. 文件清单为: nopasswd-login-controller-to-compute.sh  控制节点可以免密码登录所有的计算节点 nopasswd-login-compute-to-compute.sh    计算节点可以免密码登录其他计算节点

一个很棒的手机app:金手指音乐曲谱​

http://apk.hiapk.com/appinfo/com.jh.APPfbf19bf66a8a4ed0a11f952a11fa6e07.news 一个很棒的手机app:金手指音乐曲谱

内部服务器免密码ssh登录设置

内部服务器免密码ssh登录设置 一.背景: 平安银行项目,EZSonar产品总共部署4台服务器,1台探针服务器.3台管理引擎服务器(ES集群).平安银行客户有要求,应用程序只能使用普通用户启动,同时在部署完交付给客户时,客户需要把服务器交给另外部门统一管理.每次需要登录时,都需要向服务器管理组申请登录权限,然后通过指定的堡垒机免密码登录到EZS对应的服务器对应用户的权限,同时客户一般情况下是不允许申请root用户权限的.在此情况下,如果我们在排查问题急需root用户时就无法操作了,针对该问题对接

Linux 下一个很棒的命令行工具

导读 Taskwarrior 是 Ubuntu/Linux 下一个简单而直接的基于命令行的 TODO 工具.这个开源软件是我曾用过的最简单的基于命令行的工具之一.Taskwarrior 可以帮助你更好地组织你自己,而不用安装笨重的新工具——这有时丧失了 TODO 工具的目的. Taskwarrior是一个开源.跨平台.基于命令行的 TODO 工具,它帮你在终端中管理你的 to-do 列表.这个工具让你可以轻松地添加任务.展示列表.移除任务.而且,在你的默认仓库中就有,不用安装新的 PPA.在 U

MD4C/CO46/MD04一个很棒的工单缺料分析

大家好~~~ 之前在MD04物料分析的时候,看到有订单预留,双击有个订单报告可以显示一个订单物料是否缺料清单 这个单独的工单分析可以在T-code:MD4C,CO46查看,如果只是单独的使用,那么这两个事务码就够了,如果还想处理,方法来了: 仅需一个工单,就可展示报表... 如果想获取上面的GT_SHOW这个内表数据,

you-get 一个很强的视频地址抓取工具

来源:https://github.com/soimort/you-get 出自于 Mort Yao 大神之手:http://www.geekgrade.com/geeksheet/soimort/blogs 前言(废话): 前段时间,我因公司需求.所以要去研究如何拿到视屏的播放地址.一般普通的网站的视屏播放地址还是很好拿到的.但是对于优酷,腾讯这样的大型视屏资源站就很难拿到视屏资源了.普通的网站你通过网页就可以直接抓取到视屏的播放地址.但是这些大型就不行,这些网站都是做了防盗链的.就拿优酷来讲

linux配置免密码ssh登录

hadoop部署需要ssh免密码登录. 在官方网站上就两句话: 1.$ ssh-keygen -t rsa -P '' 2.$ cat  ~/id_rsa.pub >> ~/.ssh/authorized_keys 但是在我的机器上出现了很多的问题,导致一直ssh还是需要密码,在这里一一写下: 1.authorized_keys的权限必须是600的.而生成默认的不是 所以使用一下命令: $ chmod 600 authorized_keys 顺带,还有.ssh这个文件夹的目录的权限听说也得是7

Linux A机器免密码SSH登录B机器

一.问题 如上,A机器经常需远程操作B机器,传输文件到B机器,每次输入帐号密码过于繁琐,下文通过ssh公钥能解免密码操作问题. 二.解决 1.方案 SSH认证采用公钥与私钥认证方式. 2.步骤 1) A机器生成公钥/私钥对 [[email protected]08 ~]# ssh-keygen -t rsa -P '' Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/i