cle*_*oux 8 linux ssh bash scp
以下是问题的背景:
为了让我能够在工作中打印文档,我必须将文件复制到另一台计算机,然后从该计算机打印.(不要问.它很复杂,没有其他可行的解决方案.)两台计算机都是Linux,我在bash中工作.我目前这样做的方法是scp将文件传输到打印计算机,然后ssh从命令行打印并打印.
这就是我想做的事情:
为了让我的生活更轻松,我想将这两个步骤合二为一.我可以轻松编写一个执行这两个步骤的函数,但我必须提供两次密码.有没有办法合并这些步骤,以便我只提供一次密码?
在有人建议之前,基于密钥的ssh-logins不是一种选择.出于安全原因,管理员已特别禁用它.
解:
我最终做的是修改Wrikken提供的第二个解决方案.简单地在功能中完成他的第一个建议就可以完成工作,但我喜欢能够打印多个文档而无需每个文档输入一次密码的想法.我有一个相当长的密码,我是一个懒惰的打字员:)
所以,我所做的是采用一系列命令并将它们包装在python脚本中.我使用python因为我想参数化脚本,我觉得在python中最容易做到.我作弊,只是从python通过os.system运行bash命令.Python只处理参数化和流控制.逻辑如下:
if socket does not exist:
run bash command to create socket with timeout
copy file using the created socket
ssh command to print using socket
Run Code Online (Sandbox Code Playgroud)
除了使用超时之外,我还在我的python脚本中有一个选项,如果我愿意,可以手动关闭套接字.
如果有人想要代码,请告诉我,我会粘贴它或将它放在我的git repo上.
Wri*_*ken 13
ssh user@host 'cat - > /tmp/file.ext; do_something_with /tmp/file.ext;rm /tmp/file.ext' < file.ext
Run Code Online (Sandbox Code Playgroud)
另一种选择是让ssh隧道保持打开状态:
在〜/ .ssh/config中:
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/ssh-socket-%r-%h-%p
Run Code Online (Sandbox Code Playgroud)
.
$ ssh -f -N -l user host
(socket is now open)
Run Code Online (Sandbox Code Playgroud)
后续的ssh/scp请求将重用已存在的隧道.