import paramiko import openpyxl # 读取Excel中的账号和密码信息 wb = openpyxl.load_workbook('/root/hosts.xlsx') sheet = wb.active # 连接至Linux主机 # values_only=True ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) for row in sheet.iter_rows(min_row=2,values_only=True): username = row[0] password = row[1] host = row[2] ssh.connect(hostname=host, username=username, password=password, port=22) # 执行脚本 stdin, stdout, stderr = ssh.exec_command(''' #!/bin/bash NAME=$(uname -n) if [ -x "$(command -v mysql)" ]; then echo "MySQL is installed" fi if [ -x "$(command -v oracle)" ]; then echo "Oracle is installed" fi if [ -x "$(command -v postgres)" ]; then echo "PostgreSQL is installed" fi if [ -x "$(command -v mongo)" ]; then echo "Mongo is installed" fi if [ -x "$(command -v redis-cli)" ]; then echo "Redis is installed" fi if [ ! -x "$(command -v mysql)" ] && [ ! -x "$(command -v oracle)" ] && [ ! -x "$(command -v postgres)" ] && [ ! -x "$(command -v mongo)" ] && [ ! -x "$(command -v redis-cli)" ]; then echo "No supported database is installed" ''') # 收集查询结果并反馈 output = stdout.read().decode() print(host+"\n"+output) # 关闭连接 ssh.close() 这个python脚本无法检测Oracle,但是里面的shell脚本单独执行可以检测Oracle
时间: 2023-11-28 07:50:06 浏览: 28
这可能是由于在Python脚本中使用了双引号,导致Oracle命令被解析成了变量。可以尝试将双引号改成单引号或者使用转义符号来解决这个问题,例如:
```
if [ -x "$(command -v 'oracle')" ]; then
```
或者
```
if [ -x "$(command -v \"oracle\")" ]; then
```
相关问题
transport = paramiko.Transport((con.ssh_hostname, con.ssh_port))
这段代码使用了 paramiko 库来建立 SSH 传输对象。它接受一个元组作为参数,元组包含要连接的 SSH 服务器的主机名和端口号。在这个例子中,`con` 是一个包含连接信息的对象,`con.ssh_hostname` 表示 SSH 服务器的主机名,`con.ssh_port` 表示 SSH 服务器的端口号。
建立 SSH 传输对象后,您可以使用 `paramiko.Transport` 对象的 `connect` 方法连接到 SSH 服务器,例如:
```
transport.connect(username=con.ssh_username, password=con.ssh_password)
```
这将使用给定的用户名和密码连接到 SSH 服务器。之后,您可以使用 `transport` 对象进行各种 SSH 操作,例如执行命令、上传和下载文件等。
前端button如何对接import ssh # 建立 SSH 连接 client = ssh.SSHClient() client.load_system_host_keys() client.connect('remote_host', username='username', password='password') # 执行 shell 命令 command = 'sh /text/text.sh' stdin, stdout, stderr = client.exec_command(command) # 输出执行结果 print(stdout.read().decode()) # 关闭 SSH 连接 client.close()
前端无法直接与SSH进行对接,因为SSH连接需要在后端服务器上进行建立和执行,前端无法直接进行此操作。你需要在后端服务器上建立SSH连接,然后通过后端API与前端进行对接。
具体实现方式如下:
1. 在后端服务器上建立SSH连接,可以使用paramiko库实现:
```
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='username', password='password')
```
2. 定义后端API,在API中调用SSH连接并执行相关命令:
```
from flask import Flask, request
import paramiko
app = Flask(__name__)
@app.route('/execute_command', methods=['POST'])
def execute_command():
command = request.json.get('command')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='username', password='password')
stdin, stdout, stderr = ssh.exec_command(command)
output = stdout.read().decode()
ssh.close()
return {'output': output}
if __name__ == '__main__':
app.run()
```
3. 在前端中调用后端API:
```
const executeCommand = async () => {
const command = 'sh /text/text.sh';
const response = await fetch('/execute_command', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ command })
});
const result = await response.json();
console.log(result.output);
}
```
这样就可以实现前端按钮与后端SSH连接的对接了。需要注意的是,为了保证SSH连接的安全性,建议将SSH连接的用户名和密码等敏感信息存储在后端的环境变量中,在代码中通过读取环境变量来获取这些信息。