![](/img/trans.png)
[英]How can I run a Linux command that still runs after I close my PuTTY SSH session?
[英]On Linux, how can I share scripts across an SSH connection for the session only?
为了工作,我必须通过SSH连接到数十台Linux机器(以执行维护,监视系统,安装软件等)。
我有一小部分脚本可以帮助我完成其中一些任务,这些脚本位于Mac上/ Users / me / bin中的文件夹中。 我希望能够在远程Linux机器上运行这些脚本,但是由于多种原因,我不希望这些脚本永久位于这些机器上(例如,其他人也连接到这些远程机器,因此让它们使用是不明智的)执行这些文件)。
因此,是否可以仅在会话的生存期内通过SSH连接共享脚本?
关于如何执行此操作,我有两个想法,但我不知道它们是否会起作用。 首先,如果SSH允许文件挂载,当我连接到远程Linux机器时,我可以自动将me @ mymac:/ Users / me / bin挂载到me @ linux:/ remote_bin并将PATH变量设置为“ $ PATH:/ remote_bin” ”。 其次,我可以在连接字符串中设置端口转发(例如ssh me@linux -R 9999:127.0.0.1:<SMBPORT|ETC>
,每次连接时都要挂载共享并设置$ PATH变量。
编辑 :我想出了一个半解决方案。 在Linux机器上,编辑/etc/ssh/sshd_config
以添加以下子系统: Subsystem shareduserbinary sudo su -l -c "/bin/mount -t cifs -o port=9999,username=me,nounix,sec=ntlmssp //127.0.0.1/exported_bin /mnt/remote_bin" && bash -l -i -s
。 连接到远程计算机时,设置反向端口正向并调用子系统。 例如: ssh -R 9999:127.0.0.1:445 -s shareduserbinary me@linux
。
编辑2 :通过从sudo
命令中删除-l
并将路径从/mnt/remote_bin
为$HOME/rbin
,可以使上面的解决方案更加$HOME/rbin
。
有趣的问题。 也许可以在〜/ .bash_login中添加命令(假设您正在使用bash),以在登录时从远程主机(例如mac)复制脚本,然后在〜/ .bash_logout中添加命令以在删除脚本时删除脚本。您注销。 但是,正如bmargulies指出的那样,最好进一步并确保没有其他人有权读取或执行脚本。
您可以在启动SSH会话时使用OpenSSH
的LocalCommand
上载文件(例如使用scp
或rsync
)(请参见man ssh_config
和this ):
Host server1 server2 [...]
PermitLocalCommand yes
LocalCommand scp -q /Users/bin/me/* %h:temp_bin/
并使用.bash_logout
或在.bashrc
指定的EXIT
trap
删除注销时目录的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.