有些时候我们希望运行一个脚本,直接连接linux服务器并执行命令。

通过shell文件

因为可能要频繁输入密码,所以建议先免密登录一下 ssh-copy-id user@ip

java示例:

  1. mvn clean package -Dmaven.test.skip=true
  2. remote=root@www.tianyunperfect.cn
  3. # 在本地执行的代码,比如上传文件到服务器 scp 本地文件 user@ip:远程目录
  4. scp anki_memory/target/anki_memory-1.0-SNAPSHOT.jar ${remote}:/app/memory/
  5. # 执行命令
  6. ssh -o StrictHostKeyChecking=no ${remote} > /dev/null 2>&1 << eeooff
  7. cd /app/memory/
  8. sh bin/boot.sh restart
  9. exit
  10. eeooff
  11. echo ok

web示例:

  1. umi build
  2. remote=root@www.tianyunperfect.cn
  3. # 在本地执行的代码,比如上传文件到服务器 scp 本地文件 user@ip:远程目录
  4. scp -r dist/* ${remote}:/app/memory/static
  5. echo ok

案例:推送静态文件

将dist下的文件全部推送到static目录下

  1. remote=worker@10.20.222.191
  2. # 在本地执行的代码,比如上传文件到服务器 scp 本地文件 user@ip:远程目录
  3. scp -r dist/* ${remote}:/apps/biaozhu-nlu2/static
  4. echo ok

通过python脚本

可以通过用户名和密码方式登录,也可以通过pkey秘钥方式登录,将passwd参数替换即可。

  1. import paramiko
  2. ip = "soft.tianyunperfect.cn" # 需要远程的PC
  3. port = 22 # 远程端口
  4. userName = "" # 登陆的用户名
  5. passwd = "" # 登陆的密码
  6. cmd = """
  7. /sbin/ifconfig eth0 |grep inet | awk -F ' ' '{print $2}'
  8. """
  9. # 拼接cmd,每行后面加分号
  10. cmd = cmd.splitlines()
  11. cmd = ";".join(cmd)
  12. def exeCmd(ip, userName, passwd, port, cmd):
  13. # 建立SSH连接
  14. ssh = paramiko.SSHClient()
  15. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  16. ssh.connect(ip, port, userName, passwd)
  17. stdin, stdout, stderr = ssh.exec_command(cmd)
  18. result = stdout.read().decode("UTF-8")
  19. print(result)
  20. ssh.close()
  21. if __name__ == '__main__':
  22. exeCmd(ip, userName, passwd, port, cmd)
  23. 》》》》》
  24. 172.17.8.13