AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 936746
Accepted
LetMeSOThat4U
LetMeSOThat4U
Asked: 2018-10-24 01:38:47 +0800 CST2018-10-24 01:38:47 +0800 CST 2018-10-24 01:38:47 +0800 CST

~/.bashrc 不是来自 ssh 'command'

  • 772

最后.bashrc我补充说:

touch /tmp/bash_noninteractive_test

跑:

/usr/bin/ssh -v -C [email protected] 'ls'

在主机上(之前以交互方式登录):

% ls -l /tmp/bash_noninteractive_test
ls: cannot access /tmp/bash_noninteractive_test: No such file or directory

我认为~./bashrc总是来源于非交互式外壳,比如通过 SSH?我该如何解决?

受影响的系统:

% lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty

% lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.11 (jessie) Release: 8.11 Codename: jessie

linux
  • 2 2 个回答
  • 11706 Views

2 个回答

  • Voted
  1. Saumya Kanta Swain
    2021-05-05T22:52:34+08:002021-05-05T22:52:34+08:00

    将我的位添加到旧线程以获取信息,因为接受的答案不是 .bashrc 没有被 ssh 命令读取的真正原因。阅读此答案后,我得到了提示。bash 手册页中 INVOCATION 部分的倒数第二段指出:

    Bash 尝试确定它何时在其标准输入连接到网络连接的情况下运行,就像由远程 shell 守护程序(通常是 rshd)或安全 shell 守护程序 sshd 执行时一样。如果 bash 确定它正在以这种方式运行,它会从 ~/.bashrc 和 ~/.bashrc 读取并执行命令,前提是这些文件存在并且可读。如果作为 sh 调用,它将不会执行此操作。--norc 选项可用于禁止此行为,--rcfile 选项可用于强制读取另一个文件,但 rshd 和 sshd 通常都不会使用这些选项调用 shell 或允许指定它们。

    因此,尽管 ssh 命令以非交互式用户身份运行,但 .bashrc 仍会被加载。

    但是您的操作系统可能会在 .bashrc 的顶部添加类似于以下内容(来自 Ubuntu 18.04)的检查,在非交互式调用的前几行之后退出 .bashrc。

    # ~/.bashrc: executed by bash(1) for non-login shells.
    # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
    # for examples
    
    # If not running interactively, don't do anything
    case $- in
        *i*) ;;
          *) return;;
    esac
    

    为了防止检查,打开 .bashrc 并注释这些行,你的 ssh 命令将读取整个 .bashrc ,我想这就是你所期望的结果。

    • 8
  2. Best Answer
    telcoM
    2018-10-24T05:08:11+08:002018-10-24T05:08:11+08:00

    来自 INVOCATION 章节man bash:

    当一个不是登录 shell 的交互式 shell 启动时,bash 会从/etc/bash.bashrc和读取并执行命令~/.bashrc,如果这些文件存在的话。这可以通过使用该--norc选项来禁止。file 选项将--rcfile强制 bash 从 file 而不是/etc/bash.bashrcand读取和执行命令~/.bashrc。

    例如,当 bash 以非交互方式启动时,为了运行一个 shell 脚本,它会BASH_ENV在环境中查找变量,如果它出现在那里,则展开它的值,并将展开的值用作要读取和执行的文件的名称。Bash 的行为就像执行了以下命令:

             if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
    

    但 PATH 变量的值不用于搜索文件名。

    因此,除非指向它,否则它似乎~/.bashrc永远不会来源于非交互式外壳。BASH_ENV

    根据您希望实际实现的目标,您可能会考虑在远程主机上启用PermitUserRC和/或PermitUserEnvironmentin /etc/ssh/sshd_config,然后将所需的环境变量~/.ssh/environment和/或所需的命令写入~/.ssh/rc.

    注意:如果您计划将 SSH X11 转发与 一起使用~/.ssh/rc,则必须包含一段代码以将 X11 会话显式提供给xauth -q -命令;sshd(8)请参阅手册页SSHRC 章节中的示例。

    • 6

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve