| 概览 | |
|---|---|
| 适宜人群 | Linux 基础、shell 编程基础 |
| 本文字数 | 约等于 269 字 |
| 阅读时间 | 约等于 1 分钟 |
| 涉及知识 | ssh,sshpass,shell,linux,python |
解决问题
有些情况下,我们需要编写非交互的 shell 脚本操作 Linux 服务器,单纯运用 ssh 工具是不提供这种功能的,因此引出了下文的 sshpass 工具和 python 的 pty 模块,以及 expect 工具
名词解析(只针对本文内容)
交互:即操作 ssh Linux 命令操作的时候,需要手动输入密码 非交互:sshpass 通过读取和预置密码的方式,无需手动输入密码
使用 sshpass 的方式
sshpass -p "${SSH_PASSWORD}" ssh -o StrictHostKeyChecking=no "${SERVER_USER_NAME}"@"${SERVER_IP}" "ls -al"
使用 python 的方式
使用 python 自带一个名为 pty 的 modual,它有一个 spawn 函数,manual中对它的描述是:
pty.spawn(argv[, master_read[, stdin_read]])
Spawn a process, and connect its controlling terminal with the current process’s standard io. This is often used to baffle programs which insist on reading from the controlling terminal.
脚本名称 pty-process.py
#!/bin/env python
import pty
import sys
pty.spawn(sys.argv[1:])
执行语句
echo $passwd |./pty-process.py ssh $usr@$remote $command
非交互式复制远程服务器上的文件
sshpass -p "${SSH_PASSWORD}" scp -o StrictHostKeyChecking=no -r "${SERVER_USER_NAME}"@"${SERVER_IP}":"${FILE_PATH}" "${CURRENT_PATH}"