繁体   English   中英

如何在 /etc/ssh/sshrc 中使用 STDOUT 而不会破坏 SCP

[英]How to use STDOUT inside /etc/ssh/sshrc without breaking SCP

我想在任何 SSH 用户登录时调用一个程序,该程序会打印一条欢迎消息。 我通过编辑/etc/ssh/sshrc文件来做到这一点:

#!/bin/bash

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
echo $USER logged in from $ip

为简单起见,我在示例中将程序调用替换为简单的 echo 命令

问题是,我了解到 SCP 对任何打印到 stdout in.bashrc 或显然是 sshrc 的脚本都很敏感。 我的 SCP 命令无声无息地失败了。 这在此处得到确认: https://stackoverflow.com/a/12442753/2887850

许多解决方案提供了快速检查用户是否在交互式终端中的方法:

  • if [[ $-;= *i* ]]; then return; fi if [[ $-;= *i* ]]; then return; fi链接
    • 失败,因为[没有链接
  • case $- in *i*链接
    • 失败是因为in不被识别?
  • 使用tty程序(同上)
    • sshrc执行时, tty给了我一个奇怪的错误代码

虽然所有这些解决方案都可以在正常的 BASH 环境中工作,但它们都不能在sshrc文件中工作。 我相信这是因为 PATH (我怀疑还有其他一些事情)在从sshrc执行时实际上不可用,尽管用 shebang 指定了 BASH 。 我不太确定为什么会这样,但是这个链接让我知道sshrc在有限的环境中运行。

所以问题就变成了:有没有办法在sshrc执行的有限环境中检测交互式终端?

使用test检查$SSH_TTY此链接中的最终解决方案):

test -z $SSH_TTY || echo $USER logged in from $ip

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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