首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在~/. ssh /rc中如何区分ssh和scp?

在~/. ssh /rc中如何区分ssh和scp?
EN

Unix & Linux用户
提问于 2021-07-06 17:06:28
回答 1查看 372关注 0票数 2

每次我通过neofetch登录到远程服务器时,我都想启动OpenSSH (一个显示横幅的小型实用程序)。因此,我刚刚将/usr/bin/neofetch添加到我的~/.ssh/rc文件中,它运行得很好。问题是,当我将~/.ssh/rc放到服务器上时,scp也会被解析。一个完整的scp命令工作得很好,但是当我尝试使用scp的自动完成功能时,当我输入以便它显示远程服务器上可用的文件/文件夹时,会出现一个问题,例如:

代码语言:javascript
复制
$ scp remote-host:/t 
\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\`\\\"\\\"\\\"\\\  
\\\ \\\$\\\$\\\:\\\ \\\ \\\ \\\ \\\ \\\ \\\$\\\$.\\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m-^[\\\[0m^[\\\[1m\\\ \\\ \\\ \\\ \\\,d\\\$\\\$\\\'\\\  
\\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$b.\\\  
\\\ \\\,\\\$\\\$P\\\'\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$\\\$.\\\  
\\\ \\\$\\\$P\\\ \\\ \\\ \\\ \\\ \\\ d\\\$\\\'\\\ \\\ \\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m\\\,^[\\\[0m^[\\\[1m\\\ \\\ \\\ \\\ \\\$\\\$P\\\  
\\\'\\\,\\\$\\\$P\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\,ggs.\\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$b\\\:\\\  
\\\ \\\$\\\$\\\;\\\ \\\ \\\ \\\ \\\ \\\ Y\\\$b._\\\ \\\ \\\ _\\\,d\\\$P\\\'\\\  
^[\\\[0m^[\\\[1m\\\ \\\`\\\$\\\$b\\\ \\\ \\\ \\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m\\\"-.__\\\  
^[\\\[0m^[\\\[1m\\\ \\\ \\\`Y\\\$\\\$\\\ 
(...)

通常,$ scp remote-host:/t 向我展示以/t开头的文件/文件夹(例如/tmp),但现在它执行neofetch横幅。

是否有一种方法来区分$ ssh$ scp in ~/.ssh/rc (只有当我将ssh放入服务器时才启动neofetch,而不是当我将D17放入服务器时才启动D16)?

注意:我不希望每次启动bash或每次启动登录shell时都启动新获取,因此将其放在/etc/bash.bashrc/etc/profile中是不可取的。我只想在SSH连接之后启动它。

我做了一些研究并尝试了几件事:

  • 这个职位的启发下,我尝试了:if [ -t 0 ]; then /usr/bin/neofetch; fiif tty > /dev/null; then /usr/bin/neofetch; fi,但是它不起作用(neofetch从未启动,甚至在$ ssh之后也没有)
  • 受启发的在那个岗位上,我还尝试使用$-环境变量来区分交互式会话和非交互式会话,但它也不起作用,因为~/.ssh/rc是由破折号解析的,而不是由bash解析的( $-是bash变量)

不过,我找到了一个可行的解决方案(嗯,有点.)。它的灵感来自于通过这个职位

  • 在服务器上,在~/.ssh/rc中,我放置:if [ ! "$LC_SCP" = "yes" ]; then /usr/bin/neofetch; fi
  • 在客户机上,我必须在LC_SCP之前设置一个$ scp环境变量:
代码语言:javascript
复制
$ export LC_SCP=yes

$ scp -o SendEnv=LC_SCP remote-host:/t
(works, doesn't launch neofetch)

起作用了,但它是坎伯曼。难道没有更好的方法来区分sshscp会话在~/.ssh/rc中吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-07-06 19:42:36

环境变量SSH_TTY似乎只在sshing时设置,而不是在scping时设置。因此,以下几点就足够了(至少在我的测试中):

代码语言:javascript
复制
if [ -n "$SSH_TTY" ]; then /usr/bin/neofetch; fi

(关于它的价值,我通过查看env | grep -i ssh的输出猜到了这一点。)

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/657250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档