sshpass:一个很棒的免交互 SSH 登录工具,但不要用在生产服务器上
创始人
2024-03-01 18:35:19
0

在大多数情况下,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

sshpassssh 一起使用,使用下面的命令可以查看 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 - Linux Remote Login via SSH

sshpass – 使用 SSH 远程登录 Linux

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

$ export SSHPASS='my_pass_here'
$ echo $SSHPASS
$ sshpass -e ssh aaronkilik@10.42.0.1 'df -h' 

sshpass - Hide Password in Prompt

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 - Supply Password File to Login

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

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

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


via: http://www.tecmint.com/sshpass-non-interactive-ssh-login-shell-script-ssh-password/

作者:Aaron Kili 译者:geekpi 校对:jasminepeng

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

相关内容

ssh 登录超时 expe...
ssh -p 22 root@192.168.1.1 -v...
2025-05-29 15:17:15
添加已有的PublicKe...
mkdir -p ~/.ssh/ To overwrite aut...
2025-05-29 06:01:59
不需要SSH连接远程Mon...
要不需要SSH连接远程MongoDB服务器,可以使用以下方法之一:...
2025-01-10 15:00:48
不同操作系统的客户端与SS...
不同操作系统的客户端与SSH服务器的行为不同:分段错误可能是由于操...
2025-01-08 09:00:54
不使用添加的SSH密钥在n...
在nushell中使用Git时,如果你没有使用添加SSH密钥的权限...
2024-12-29 11:30:55
不使用SSH从远程机器触发...
要从远程机器触发一个Python脚本,而不使用SSH,可以使用以下...
2024-12-29 10:31:02

热门资讯

《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
硬核观察 #1245 Open... #1 OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令在 1 月 10 日...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
如何理解Apache 2.0许... 提要:Apache 2.0许可证中的专利许可条款使得开源代码可以安全使用,但它经常被误解。Apach...