可通过ssh连接后执行passwd命令修改远程linux服务器用户密码,具体方式包括:一、非交互式调用(如chpasswd、--stdin);二、交互式ssh终端操作;三、sudo免密配合管道输入;四、expect脚本模拟交互。

如果您需要通过命令行修改远程Linux服务器的用户密码,通常需先建立SSH连接,再调用passwd命令执行更改。以下是几种可行的操作方式:
一、使用SSH直接执行passwd命令
该方法适用于已知当前用户密码且具备sudo权限或为root用户的情况,可避免交互式输入,通过管道传递新密码(需注意部分系统限制非交互式passwd调用)。
1、运行以下命令,将新密码通过stdin传入passwd(需确保系统安装了expect或使用chpasswd替代):
2、若系统支持,可使用echo配合passwd --stdin(仅限部分发行版如CentOS/RHEL的passwd支持该选项):
3、更通用的方式是使用chpasswd命令(需sudo权限):
echo "username:newpassword" | sudo chpasswd
二、通过SSH会话交互式修改密码
此方式依赖标准终端交互,适用于所有主流Linux发行版,无需额外工具,但要求能正常启动伪终端(-t参数确保TTY分配)。
1、执行带-t参数的SSH连接并启动passwd:
ssh -t user@remote_host passwd
2、连接成功后,终端将提示输入当前密码。
3、随后两次输入新密码完成修改。
三、使用SSH密钥+sudo免密执行密码更新
当目标用户配置了sudo免密权限时,可通过一条命令触发密码重置流程,避免手动输入旧密码,适合自动化脚本场景。
1、确认远程用户在sudoers中具有免密执行passwd的权限(如包含:username ALL=(ALL) NOPASSWD: /usr/bin/passwd username)。
2、执行以下命令(需提前配置好SSH密钥登录):
ssh user@remote_host "echo -e 'newpass\nnewpass' | sudo passwd username"
3、注意:该操作依赖系统允许从stdin读取密码,部分安全加固系统可能禁用此行为。
四、使用expect脚本自动应答passwd交互
当无法修改sudoers或系统不支持非交互式passwd时,expect可模拟人工输入,解决密码提示阻塞问题。
1、在本地安装expect(如Ubuntu执行sudo apt install expect)。
2、创建临时expect脚本(或使用内联方式):
ssh user@remote_host 'expect -c "spawn passwd; expect password:; send newpass\r; expect New password:; send newpass\r; expect Retype new password:; send newpass\r; expect eof;"'
3、若提示未找到expect,需在远程主机安装expect或改用本地expect调用SSH。










