您现在的位置是:首页 >学无止境 >DevOps系列文章之 远程部署的一种方案网站首页学无止境

DevOps系列文章之 远程部署的一种方案

Coder_Boy_ 2024-10-01 12:01:04
简介DevOps系列文章之 远程部署的一种方案

远程部署的一种方案

sshpass

一个简单、轻量级命令行工具,提供非交互式密码验证

原理

  • ssh 直接使用 TTY 访问,以确保密码是用户键盘输入的。 sshpass 在专门的 tty 中运行 ssh,以误导 ssh 相信它是从用户接收到的密码
  • 使用 sshpass 是不安全的,因为所有系统上的用户可以看到密码。因此,在生产环境,建议使用 密钥登录

应用范围:可以在命令行直接使用密码来进行远程连接和远程拉取文件。

使用前提:对于未连接过的主机。而又不输入yes进行确认,需要进行sshd服务的调整:

# vim /etc/ssh/ssh_config   
StrictHostKeyChecking no

# vim /etc/ssh/sshd_config  
GSSAPIAuthentication no
UseDNS no

# service sshd restart

安装

Ubuntu:

apt-get  install sshpass

CentOs

# 源码包安装
 wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz 
 tar xvzf sshpass-1.05.tar.gz 
 cd sshpass-1.05.tar.gz 
 ./configure 
 make 
 make install 

# yum安装
yum  -y install sshpass

命令

sshpass [options] ssh user@host

options

-p password

直接提供密码

sshpass -p 'my_pass_here' ssh aaronkilik@10.42.0.1 'df -h'

-e


读取环境变量 `SSHPASS`

在`bashrc` 中添加 `SSHPASS` 环境变量,配置登录密码

export SSHPASS=‘PmN8uq48tBGwrMCY’

sshpass -e ssh user@host

-f filename 从文件中读取密码

sshpass -f password_filename ssh aaronkilik@10.42.0.1 'df -h'

案例

实例1:直接远程连接某台主机:

命令:sshpass -p xxx ssh root@192.168.1.128

实例:本地执行远程机器的命令:

命令: sshpass -p xxx ssh root@192.168.1.128 “ethtool ens33”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SFZlaZaP-1686364838723)(C:UsersGaryAppDataRoamingTypora	ypora-user-imagesimage-20230610102040276.png)]

实例2:远程连接指定ssh的端口:

命令:sshpass -p ‘1234567’ ssh -p 22 root@192.168.1.128 (当远程主机不是默认的22端口时候)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kcPIXrk8-1686364838724)(C:UsersGaryAppDataRoamingTypora	ypora-user-imagesimage-20230610102238164.png)]

实例3:从密码文件读取文件内容作为密码去远程连接主机

命令:sshpass -f xxx.txt ssh root@192.168.1.128

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RKu5jT52-1686364838725)(C:UsersGaryAppDataRoamingTypora	ypora-user-imagesimage-20230610102448867.png)]

实例4:从远程主机上拉取文件到本地

命令: sshpass -p ‘1234567’ scp root@192.168.1.128:/home/shell/demo.sh ./home

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7l4h1rFu-1686364838725)(C:UsersGaryAppDataRoamingTypora	ypora-user-imagesimage-20230610103039007.png)]

注意:sshpass不可以直接接带特殊字符意义的密码,需要转义或者用小括号,或者指定文件的方式来连接都可以规避这个问题。

如何将sshpass命令放入bash脚本中?

我试图在bash脚本中运行sshpass命令,但是它不起作用。

如果我从终端运行相同的命令,则可以正常运行,但无法在bash脚本中运行它。

#! /bin/bash

sshpass -p 'password' ssh user@host command

您可以像这样编写sshpass ssh命令的脚本demo,sh

#!/bin/bash

export SSHPASS=password
sshpass -e ssh -oBatchMode=no user@host

[外链图片转存中...(img-eQ4mf4ON-1686364838726)]






风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。