繁体   English   中英

如何使用ssh使我的自定义shell工作?

[英]How can I make my custom shell work with ssh?

我正在使用Python为一个服务器上非常有限的用户创建一个自定义shell,他通过ssh使用公钥认证登录。 他们需要能够在具有某些限制的特定目录中运行lsfind -type dcat 如果您运行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM