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

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

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

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

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

在 Linux 中安装 sshpass

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

# yum install sshpass

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

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

$ 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),并检查文件系统磁盘使用情况,如图所示。

$ sshpass -p 'my_pass_here' ssh aaronkilik@10.42.0.1 'df -h'

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

sshpass – 使用 SSH 远程登录 Linux

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

$ export SSHPASS='my_pass_here'

$ echo $SSHPASS

$ sshpass -e ssh aaronkilik@10.42.0.1 'df -h'

sshpass – 在终端中隐藏密码

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

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

export SSHPASS='my_pass_here'

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

$ source /etc/profile

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

$ sshpass -f password_filename ssh aaronkilik@10.42.0.1 'df -h'

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

------- 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 原创作者,热爱电脑工作,并乐于分享知识。

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux脚本免交互,系统运维|sshpass:一个很棒的免交互 SSH 登录工具,但不要用在生产服务器上...相关推荐

  1. 《Linux运维总结:sshpass一个很棒的免交互SSH登录工具》

    文章目录 一.sshpass介绍 二.sshpass安装 三.sshpass使用 四.sshpass实例 总结:整理不易,如果对你有帮助,可否点赞关注一下? 一.sshpass介绍 ssh登陆不能在命 ...

  2. win10安装sshpass_系统运维|sshpass:一个很棒的免交互 SSH 登录工具,但不要用在生产服务器上...

    在大多数情况下,Linux 系统管理员使用 SSH 登录到程 Linux 服务器时,要么是通过密码,要么是无密码 SSH 登录或基于密钥的 SSH 身份验证. 如果你想自动在 SSH 登录提示符中提供 ...

  3. Linux内外部命令和系统运维

    Linux命令是bash命令的子集,位于/bin./sbin./usr/bin目录下,包含文件操作.网络.系统服务等方面,其中/sbin为超级管理员目录,/bin为普通管理员目录,/usr/bin为一 ...

  4. linux 建立lun分区,系统运维|在 iSCSI Target 服务器中使用LVM创建和设置LUN(二)

    LUN是逻辑单元号,它与iSCSI存储服务器共享.iSCSI 目标器通过TCP/IP网络共享它的物理驱动器给发起程序(initiator).这些来自一个大型存储(SAN:Storage Area Ne ...

  5. linux 配置离线yum,系统运维|创建局域网内的离线 YUM 仓库

    在早先的教程中,我们讨论了如何使用 ISO 镜像和在线 Yum 仓库的方式来创建自己的 Yum 仓库.创建自己的 Yum 仓库是一个不错的想法,但若网络中只有 2-3 台 Linux 机器那就没啥必要 ...

  6. linux ubuntu 安装ftp,系统运维|如何在 Ubuntu 下安装和配置 FTP 服务器

    FTP(文件传输协议)是一个较老且最常用的标准网络协议,用于在两台计算机之间通过网络上传/下载文件.然而, FTP 最初的时候并不安全,因为它仅通过用户凭证(用户名和密码)传输数据,没有进行加密. 警 ...

  7. Linux怎么卸载unbound,系统运维|如何在 Arch Linux 中安装 DNSCrypt 和 Unbound

    DNSCrypt 是一个用于对 DNS 客户端和 DNS 解析器之间通信进行加密和验证的协议.它可以阻止 DNS 欺骗或中间人攻击. DNSCrypt 可用于大多数的操作系统,包括 Linux,Win ...

  8. linux开启审计进程,系统运维|Auditd-Linux 服务器安全审计工具

    首先,Linux中国祝贺读者 2015羊年春节快乐,万事如意! .下面开始这个新年版审计工具的介绍. 安全防护是首先要考虑的问题.为了避免别人盗取我们的数据,我们需要时刻关注它.安全防护包括很多东西, ...

  9. linux 5353端口禁止,系统运维|解决DNS污染与劫持之使用特殊DNS端口

    os:ubuntu 12.04 LTS 软件:dnsmasq dns测试: dig www.facebook.com @8.8.8.8 +short 37.61.54.158 在wiki词条域名服务器 ...

最新文章

  1. 【力扣网练习题】移除元素
  2. 以太坊创始人V 神:普通人看见现在,天才看见未来
  3. 通州区机器人比赛活动总结_马驹桥镇中心小学在2017通州区青少年机器人竞赛中勇创佳绩...
  4. Pytorch(3)-数据载入接口:Dataloader、datasets
  5. MySQL笔记-简单配置主从库
  6. web网页期末作业-在线教育
  7. python加密字符串小写字母循环后错两位_Python简单加密程序:如何将Z循环回
  8. 写代码需要注意的几方面
  9. Python 爬取 20 万条评论,告诉你周杰伦新歌为啥弄崩 QQ 音乐?
  10. 百分之六的谷歌云存储桶因配置错误而遭任意访问
  11. 信用卡交易数据异常检测
  12. 程序设计语言的特性——心理特性、工程特性、技术特性
  13. php laravel 开发工具,Laravel 文档工具
  14. 8位12指令微程序CPU设计
  15. 【STM32知识点】STM32基础知识总结
  16. mapreduce面试问题_MapReduce问题与解答第2部分
  17. 跟循泰国国内游宣传曲MV,像本地人一样游曼谷
  18. Redis -- 缓存穿透和雪崩
  19. 阿里和唯品会java开发手册通读链接
  20. WordPress搭建过的知名网站有哪些?

热门文章

  1. 如何选择一款好用的健身房软件?
  2. win7 应用图标显示异常
  3. FTP传输安全问题日渐突出,如何解决替代问题?
  4. 易优cms 模板文件lists_tags.htm不存在,怎么弄 Eyoucms快速入门
  5. 【行研报告】2021互联网行业挑战与机遇白皮书—附下载
  6. 利用Vitis开发基于ZCU106的神经网络加速器(一)——Vitis概述及XRT编译
  7. JAVA操作PDF文件
  8. 4G DTU之短信收发设置
  9. 计算机上的用户名是哪一个,电脑在哪登陆上网账号密码
  10. atom遇到的问题及解决方法