规避ssh交互密码-自动化登录神器sshpass

sshpass 是一款用于简化 SSH 自动化登录的工具,它允许在脚本中通过非交互的方式传递密码,从而自动登录到远程服务器,使得我们可以更高效地管理 SSH 登录过程。

使用 sshpass 的好处:

1. 自动化脚本支持:便于在自动化脚本执行SSH登录,无需人工输入。

2. 简化操作:通过命令行参数传递密码,减少了手动输入的繁琐。

3. 提高效率:在批量管理服务器时,减少了登录过程的时间开销。

4. 兼容性强:支持大多数需要密码认证的 SSH 工具和脚本。

5. 方便测试:在测试环境中可以快速配置和使用。

安装 sshpass:

1. 在 Debian/Ubuntu 系统上安装:

sudo apt-get update
sudo apt-get install sshpass

2. 在 CentOS/RHEL 系统上安装:

sudo yum install epel-release

sudo yum install sshpass

使用 sshpass 的基本示例:

1. 执行简单的 SSH 登录:假设需要通过 SSH 登录到远程服务器 remote.server.com 并执行命令 ls /var/log,可以使用以下命令:

sshpass -p 'your_password' ssh user@remote.server.com 'ls /var/log'

解析:

  • -p ‘your_password’:指定 SSH 登录的密码。
  • ssh user@remote.server.com ‘ls /var/log’:通过 SSH 执行 ls /var/log 命令。

2. 使用 sshpass 进行 SCP 文件传输:要将本地文件 file.txt 传输到远程服务器 /home/user/ 目录中,可以使用以下命令:

sshpass -p 'your_password' scp file.txt user@remote.server.com:/home/user/

解析:

  • scp file.txt user@remote.server.com:/home/user/:将 file.txt 复制到远程服务器指定路径。

Python 封装示例:分别用于自动化 SSH 登录和 SCP 文件传输

1. 执行 SSH 命令:

# -*- coding: utf-8 -*-
# time: 2024/09/04 21:18
# file: sshpass_command.py
# author: tom
# 微信公众号: 玩转测试开发
import subprocess


def ssh_command(host: str, user: str, password: str, command: str) -> None:
    """
    使用 sshpass 执行 SSH 命令。

    :param host: 远程主机地址
    :param user: SSH 用户名
    :param password: SSH 密码
    :param command: 要执行的命令
    """
    sshpass_command = [
        'sshpass', '-p', password, 'ssh', f'{user}@{host}', command
    ]
    try:
        result = subprocess.run(sshpass_command, check=True, text=True, capture_output=True)
        print(f"命令输出:\n{result.stdout}")
    except subprocess.CalledProcessError as e:
        print(f"命令执行失败:\n{e.stderr}")


# 示例调用
if __name__ == "__main__":
    ssh_command('remote.server.com', 'user', 'your_password', 'ls /home && pwd')

运行结果:


(base) tom@tom:~/tests$ python main.py
命令输出:
lighthouse
ubuntu
/home/ubuntu

2. 使用 SCP 传输文件:


# -*- coding: utf-8 -*-
# time: 2024/12/045 13:40
# file: sshpass_command.py
# author: 装系统的SRE运维
# 网站: www.linux66.cn
import subprocess


def scp_file(host: str, user: str, password: str, local_file: str, remote_path: str) -> None:
    """
    使用 sshpass 进行 SCP 文件传输。

    :param host: 远程主机地址
    :param user: SSH 用户名
    :param password: SSH 密码
    :param local_file: 本地文件路径
    :param remote_path: 远程文件路径
    """
    scp_command = [
        'sshpass', '-p', password, 'scp', local_file, f'{user}@{host}:{remote_path}'
    ]
    try:
        result = subprocess.run(scp_command, check=True, text=True, capture_output=True)
        print(f"文件传输输出:\n{result.stdout}")
    except subprocess.CalledProcessError as e:
        print(f"文件传输失败:\n{e.stderr}")


# 示例调用
if __name__ == "__main__":
    scp_file('remote.server.com', 'user', 'your_password', 'file.txt', '/home/user/')

注意事项:

1. 特别留心密码安全:在命令行中直接传递密码可能会被其他用户看到。考虑使用更安全的认证方法,如 SSH 密钥对。

2. 清理命令历史: 避免在命令历史中保存密码。可以通过使用环境变量或配置文件来存储密码。

3. 进行必要的权限控制:确保使用 sshpass 的脚本和命令具备适当的权限,避免不必要的风险。

4. 谨慎在生产环境的使用限制: sshpass 适用于简单的自动化任务,但不推荐用于生产环境中的敏感操作。

小结:sshpass 是一个方便的工具,特别适合需要在脚本中自动化 SSH 登录和操作的场景。通过上述 Python 封装示例,您可以更高效地执行 SSH 命令和传输文件。在使用时,请注意密码的安全性和管理,以确保系统的安全性。

声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Linux

Linux 系统故障排除最常用的 10 个命令

2024-12-4 16:38:47

Linux

记一次服务器被黑CPU 100%的处理过程

2024-12-9 9:04:44

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索