通过SSH复制文件,但在登录后更改远程用户



情况很简单:

我可以用 ssh my_remote_user@remote_server ssh 到远程服务器,并希望复制一些文件,即 /var/www/docs/web.config.txt到本地。

问题是/var/www/docs/web.config.txtuserA:userA一样拥有所有权。我可以通过以下方式以该用户身份访问

$ su - userA $ Password: userApwd

考虑到这一点,我可以:

1 - 将/var/www/docs/web.config.txt复制到/tmp文件夹并将所有权更改为my_remote_user2 - 从远程复制到本地 从远程/tmp目录

我的问题:

通过bashpython或其他语言,我可以自动执行此步骤吗?

注意:有了expect,我似乎可以su - userA然后在远程服务器中插入密码,但是没有发生像cp /var/www/docs/web.config.txt这样的后续命令......

谢谢

如果你在 Linux 服务器上,你将需要使用 SCP 命令,下面是示例命令。

scp user@host:目录/源文件 目标文件scp -r user@host:directory/SourceFolder TargetFolder

您可以将su与参数一起使用-c来运行任意命令,即:

su -c "scp /var/www/docs/web.config.txt your_user@client_machine:" userA

您是否可以使用 scp 和 userA 凭据登录到远程服务器,即代替:

scp my_remote_user@remote_server:/remote/dir local_dir

用:

scp userA@remote_server:/remote/dir local_dir

对不起,时间过了太多!

感谢您的所有回复,但最后我使用 expect 找到了答案,但以我假设的不同方式......

需要明确的是,我必须运行一个expect script但只能在我的本地主机中运行,而我想运行期望进入远程服务器......

以下是我的脚本,希望对某人有所帮助:

1 参数化脚本

remoteActions.sh

#!/usr/bin/expect --
set timeout -1
# ssh connection
spawn ssh $env(fsUser)@$env(fsHost)
expect "password:"
send "$env(fsPass)r"
expect "sh"
# switch to apache user
send "su - apacher"
expect "Password: "
send "$env(fsApachePass)r"
expect -re ".*apache.*"

# create folder if not exists
send "[ -d /tmp/$env(fsRemoteTmpDir) ] || mkdir -m 777 -p /tmp/$env(fsRemoteTmpDir)r"
expect -re ".*apache.*"
# copy folder via rsync but exclude some dirs
send "rsync -a $env(fsExcludeFromRemoteDir) $env(fsRemoteDir) /tmp/$env(fsRemoteTmpDir)r"
expect -re ".*apache.*"

# change permissions
send "chmod -R 777 /tmp/$env(fsRemoteTmpDir)r"
expect -re ".*apache.*"
send "exitrn"

2 具有配置的真实脚本

#!/bin/bash
### File System
export fsUser='sshuser'
export fsHost='remoteip'
export fsPass='remotepass'
export fsApachePass='apache'
export fsRemoteDir='/var/www/webapp'
export fsExcludeFromRemoteDir='--exclude=img/ --exclude=upload/'
export fsRemoteTmpDir='/bak'

# copy remote folder into remote directory
./remoteActions.sh

3 我的把戏

使用此脚本,我可以使用我的标准用户访问 {fsRemoteTmpDir} ,它现在有 777 个权限,所以我还有两个操作要做:

  1. 运行scp以从远程复制到本地
  2. 通过ssh命令或使用另一个expect脚本删除远程{fsRemoteTmpDir}

我不发布12,因为我的问题/答案的核心在remoteActions.sh

谢谢你们!!

相关内容

  • 没有找到相关文章