ssh,sshpass免密登录

本文详细介绍了如何通过SSH实现免密登录,包括ssh-keygen生成密钥、ssh-copy-id复制公钥至远程服务器的过程。同时,介绍了sshpass工具的安装与使用方法,包括登录远程主机、执行命令、拷贝文件及忽略交互连接执行命令等场景。
部署运行你感兴趣的模型镜像

很多时候我们在确定安全的情况下,对ssh的交互登录"深恶痛绝",所以就需要进行免密登录。

1.ssh

1.1 登录 

~]# ssh -p22 root@192.168.179.111   #端口22,登录root用户              

注:若不指定用户,默认为本机使用的用户,不指定端口,默认为22端口。

1.2 登陆后执行命令  --> 命令最好全路径                  

~]# ssh root@192.168.179.111 /bin/ls -l /backup/data                                

1.3 查看已知主机                 

~]# cat ~/.ssh/known_hosts

1.4 设置免密登录

192.168.179.110--登录-->192.168.179.111

在192.168.179.110上:

~]# ssh-keygen -t rsa  #一路回车

~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.179.111    #需要输入111主机密码

~]# ssh -p22 root@192.168.179.111   #即可无需密码登录

注:110上的 id_rsa.pub (公钥)文件会存放在111上的 authorized_keys 文件中。ssh默认目录为~/.ssh/,配置文件在 /etc/ssh/ssh_config 。

2.sshpass

ssh登陆不能在命令行中指定密码。sshpass的出现,解决了这一问题。sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码(本机known_hosts文件中有的主机才能生效)。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。

由于sshpass不能使用yum安装,这儿使用源码包安装。

sshpass下载地址:http://sourceforge.net/projects/sshpass/ 下载为一个 tar.gz的压缩包。 

2.1 安装sshpass

~]# tar xf sshpass-1.06.tar.gz 
~]# cd sshpass-1.06
~]# ./configure --prefix=/usr/local/
~]# make && make install
~]# cp /usr/local/bin/sshpass /usr/bin/

2.2 使用

2.2.1 登录远程主机

~]# sshpass -p 123456 ssh -p22  root@192.168.179.111

~]# sshpass -f pw.txt ssh -p22  root@192.168.179.111    #pw.txt存放密码,密码是文件的第一行

~]# sshpass -e ssh -p22  root@192.168.179.111       #使用SSHPASS环境变量为密码

2.2.2 登录远程主机并执行命令

~]# sshpass -p 960711 ssh -p22 root@192.168.179.113 /bin/ls

2.2.3 拷贝文件到远程主机

~]# sshpass -p 123456 scp hostdir root@192.168.179.111:srcdir 

注:scp每次都是全量拷贝,增量拷贝使用rsync。

2.2.4 忽略交互连接远程主机执行命令

~]# sshpass -p 960711 ssh -o StrictHostKeyChecking=no root@192.168.179.111 '/bin/ls /tmp'

注:在远程主机上执行命令后就退出远程主机。当需要在很多主机上执行一条相同命令时需要这个参数。

更多ssh原理可参考:https://www.cnblogs.com/ftl1012/p/ssh.html

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>我们将在BCLinux系统中配置sshpass以实现免密码执行远程SSH命令。sshpass允许我们在命令行中直接提供SSH密码,从而避免交互式输入密码。但请注意,这种方法存在安全风险,因为密码会以明文形式出现在命令行或脚本中,建议仅在测试环境或安全要求不高的场景使用。 ### 步骤一:安装sshpass 1. **检查系统是否已安装sshpass**: ```bash which sshpass ``` 若未安装,则进行下一步。 2. **安装sshpass**: - 对于BCLinux(基于CentOS/RHEL),可以使用yum安装: ```bash sudo yum install sshpass ``` - 如果yum源中没有sshpass,可以手动下载源码编译安装: ```bash wget https://sourceforge.net/projects/sshpass/files/latest/download/sshpass-1.09.tar.gz tar -xvf sshpass-1.09.tar.gz cd sshpass-1.09 ./configure make sudo make install ``` ### 步骤二:使用sshpass执行远程命令 1. **基本语法**: ```bash sshpass -p '远程主机密码' ssh 用户名@远程主机IP '要执行的命令' ``` - 示例:使用用户`lq`登录到`172.25.254.123`并执行`hostname`命令: ```bash sshpass -p 'lq的密码' ssh lq@172.25.254.123 'hostname' ``` 2. **避免密码出现在命令行(使用环境变量)**: ```bash export SSHPASS='远程主机密码' sshpass -e ssh lq@172.25.254.123 'hostname' ``` - `-e`选项表示从环境变量`SSHPASS`中读取密码。 ### 步骤三:配置免密执行(更安全的方法) 虽然sshpass可以实现免交互,但更安全的方式是使用SSH密钥对认证(无需输入密码)。参考引用[1]中的方法: 1. **生成密钥对**(如果尚未生成): ```bash ssh-keygen -t rsa ``` 2. **将公钥复制到远程主机**: ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub lq@172.25.254.123 ``` 之后即可直接使用`ssh lq@172.25.254.123 'hostname'`而无需密码。 ### 步骤四:在自动化脚本中使用sshpass 在Ansible等自动化工具中,通常不建议使用sshpass,而是推荐使用SSH密钥认证。但若临时需要,可以在Ansible的hosts文件中指定密码(如引用[5]所示): ```ini [es_cluster_1] 192.168.1.191 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ``` 但注意:这种方法将密码明文存储在文件中,存在安全风险。 ### 安全警告 1. **密码泄露风险**: - 命令行中的密码可能被`ps`命令查看,或记录在历史命令中。 - 建议使用密钥认证替代密码认证。 2. **禁用密码认证(增强安全)**: 在远程主机的`/etc/ssh/sshd_config`中设置: ```ini PasswordAuthentication no ``` 然后重启sshd服务: ```bash sudo systemctl restart sshd ``` ### 常见问题排查 1. **权限问题**:如引用[3]中提到的`sftp`连接问题,确保远程主机的`/usr/libexec/sftp-server`权限正常。 2. **特殊字符处理**:如果密码包含特殊字符,使用单引号包裹密码(如引用[4]所述)。 ### 验证配置 ```bash sshpass -p 'password' ssh user@host 'echo "连接成功"' ``` --- §§相关问题§§ 1. 如何在BCLinux中配置SSH密钥认证实现免密登录? 2. sshpass使用中如何避免密码出现在历史记录中? 3. BCLinux中如何批量配置多台主机的免密登录? 4. 如何通过Ansible使用sshpass管理远程主机?</think>在BCLinux系统中配置sshpass实现免密码执行远程SSH命令,需按照以下步骤操作: --- ### 步骤一:安装sshpass工具 1. **安装依赖包**: ```bash sudo yum install -y gcc make wget ``` 2. **下载并编译sshpass**(BCLinux官方源可能不包含sshpass): ```bash wget https://sourceforge.net/projects/sshpass/files/sshpass/1.09/sshpass-1.09.tar.gz tar -xvf sshpass-1.09.tar.gz cd sshpass-1.09 ./configure make sudo make install ``` 3. **验证安装**: ```bash which sshpass # 应返回/usr/local/bin/sshpass ``` --- ### 步骤二:使用sshpass执行远程命令 #### 基础用法: ```bash sshpass -p '远程主机密码' ssh 用户名@远程主机IP '命令' ``` 示例: ```bash sshpass -p '123456' ssh root@192.168.1.100 'hostname; date' ``` #### 安全用法(避免密码暴露): 1. **使用环境变量**: ```bash export SSHPASS='123456' sshpass -e ssh root@192.168.1.100 'df -h' ``` 2. **使用文件存储密码**: ```bash echo '123456' > .passwd chmod 600 .passwd sshpass -f .passwd ssh root@192.168.1.100 'free -m' ``` --- ### 步骤三:配置Ansible使用sshpass(可选) 在Ansible配置中使用sshpass(参考引用[2][5]): 1. **编辑Ansible配置文件**: ```bash sudo vi /etc/ansible/ansible.cfg ``` 添加: ```ini [defaults] host_key_checking = False remote_user = root [privilege_escalation] become = True ``` 2. **配置hosts文件**: ```ini [web_servers] 192.168.1.100 ansible_ssh_pass=123456 192.168.1.101 ansible_ssh_pass=654321 ``` 3. **执行Ansible命令**: ```bash ansible web_servers -m ping ``` --- ### 安全注意事项 1. **密钥认证更安全**(推荐替代方案): ```bash ssh-keygen -t rsa ssh-copy-id root@192.168.1.100 # 参考引用[1] ``` 2. **密码保护措施**: - 避免在命令行直接暴露密码 - 设置密码文件权限为`600` - 定期轮换密码 3. **特殊字符处理**(参考引用[4]): ```bash sshpass -p 'P@$$w0rd!#' ssh user@host 'command' # 使用单引号包裹含特殊字符的密码 ``` --- ### 常见问题解决 1. **连接失败检查**: ```bash sshpass -p 'password' ssh -v user@host # 启用详细日志 tail -f /var/log/secure # 查看认证日志 ``` 2. **库文件权限问题**(参考引用[3]): ```bash sudo restorecon -Rv /usr/lib* # 修复SELinux上下文 ``` --- ### 验证配置 ```bash # 测试远程命令执行 sshpass -p '123456' ssh root@192.168.1.100 'echo "SSH连接成功" > /tmp/test.log' ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值