![](/img/trans.png)
[英]How do I make GridSeachCV work with a custom transformer in my pipeline?
[英]How can I make my custom shell work with ssh?
我正在使用Python为一个服务器上非常有限的用户创建一个自定义shell,他通过ssh使用公钥认证登录。 他们需要能够在具有某些限制的特定目录中运行ls
, find -type d
和cat
。 如果您运行ssh user@server -i keyfile
类的东西,这样可以正常工作,因为您看到了交互式提示,并且可以运行这些命令。 但是,像ssh user@server -i keyfile "ls /var/log"
这样的东西不会。 ssh
只是挂起,没有回应。 通过使用-v
开关我发现连接成功,所以问题出在我的shell中。 我也很确定脚本甚至没有启动,因为程序开头的print sys.argv
什么也没做。 这是代码:
#!/usr/bin/env python
import subprocess
import re
import os
with open(os.devnull, 'w') as devnull:
proc = lambda x: subprocess.Popen(x, stdout=subprocess.PIPE, stderr=devnull)
while True:
try:
s = raw_input('> ')
except:
break
try:
cmd = re.split(r'\s+', s)
if len(cmd) != 2:
print 'Not permitted.'
continue
if cmd[0].lower() == 'l':
# Snip: verify directory
cmd = proc(['ls', cmd[1]])
print cmd.stdout.read()
elif cmd[0].lower() == 'r':
# Snip: verify directory
cmd = proc(['cat', cmd[1]])
print cmd.stdout.read()
elif cmd[0].lower() == 'll':
# Snip: verify directory
cmd = proc(['find', cmd[1], '-type', 'd'])
print cmd.stdout.read()
else:
print 'Not permitted.'
except OSError:
print 'Unknown error.'
这是〜/ .ssh / authorized_keys的相关行:
command="/path/to/shell $SSH_ORIGINAL_COMMAND" ssh-rsa [base-64-encoded-key] user@host
如何在命令行上传递命令时创建shell脚本,以便可以在脚本中使用它而无需启动交互式shell?
ssh无响应的问题与ssh ssh user@host cmd
没有为正在运行的命令打开终端这一事实有关。 尝试调用ssh user@host -t cmd
。
但是,即使您传递-t
选项,您的脚本仍然会遇到另一个问题:它只能以交互方式工作,并完全忽略传递的$ SSH_ORIGINAL_PROGRAM。 一个天真的解决方案是检查sys.argv
,如果它大于1,你不会永远循环,而只执行你在其中的任何命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.