![](/img/trans.png)
[英]Can I use an existing SSH connection and execute SCP over that tunnel without re-authenticating?
[英]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
不被识别?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.