Joe*_*hew 21 linux ssh sftp bashrc
我的问题是我需要设置几个变量,并且每次登录ssh shell时输出几行,同时我必须能够使用sftp通过Filezilla tarnsfer文件。
现在,根据http://www.openssh.org/faq.html 上的 openssh 常见问题解答,如果您的启动脚本回显任何类型的输出,它就会与 sftp 混淆。因此,它要么无限期地延迟,要么因“连接被服务器关闭,退出代码为 128”而出错。
我尝试过将 .bashrc 移动到 .bash_profile 或在 .bashrc 中使用以下代码的解决方案:
if [ "$TERM" != "dumb" ]
then
source .bashc_real
fi
Run Code Online (Sandbox Code Playgroud)
和:
if [ "$TERM" = "xterm" ]
then
source .bashc_real
fi
Run Code Online (Sandbox Code Playgroud)
但是,没有任何效果。我的 shell 终端是 bash,我使用 filezilla 连接到 sftp。
Mik*_*ike 27
尝试这样做
if [ "$SSH_TTY" ]
then
source .bashc_real
fi
Run Code Online (Sandbox Code Playgroud)
Ins*_*yte 18
迈克的回答可能会奏效。但值得指出的是,您可以通过仔细选择将详细内容放入哪些启动文件来完成此操作。来自 bash 手册页:
当 bash 作为交互式登录 shell 或作为具有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的命令中读取和执行命令。当 shell 启动时可以使用 --noprofile 选项来禁止这种行为。
当一个不是登录 shell 的交互式 shell 启动时,bash 从 ~/.bashrc 读取并执行命令,如果该文件存在。这可以通过使用 --norc 选项来禁止。--rcfile 文件选项将强制 bash 从文件而不是 ~/.bashrc 读取和执行命令。
sftp/scp 工具会启动一个交互式非登录 shell,因此 .bashrc 将被提供。许多发行版从 .bash_profile 中获取 .bashrc,反之亦然,因此可能会让人感到困惑。测试登录环境清洁度的一个好技巧是使用命令 ssh 进入,该命令模拟 scp/sftp 连接的相同方式。例如:ssh myhost /bin/true将向您显示 scp/sftp 在连接时看到的内容。
一个简单的演示:
insyte@mazer:~$ echo "echo Hello from .profile" > .profile
insyte@mazer:~$ echo "echo Hello from .bashrc" > .bashrc
sazerac:~ insyte$ ssh mazer /bin/true
Hello from .bashrc
sazerac:~ insyte$
insyte@mazer:~$ rm .bashrc
sazerac:~ insyte$ ssh mazer /bin/true
sazerac:~ insyte$
Run Code Online (Sandbox Code Playgroud)
第一个测试会导致 scp/sftp/rsync 等中断。第二个版本将工作得很好。
| 归档时间: |
|
| 查看次数: |
12740 次 |
| 最近记录: |