一次scp连接服务器无响应但ssh正常的问题

背景

这个问题在Linux上出现了很久,具体表现是用work账户进行scp时,输入密码后就一直不动;用ssh登录没任何问题;用root账户进行scp能成功。

网上找了很多资料,这篇文章使用exec zsh导致该问题的出现。我在.bashrc最后加上了exec $HOME/zsh-5.9/bin/zsh使得work账户能用zsh。最根本的原因就是使用了zsh导致scp出现了问题,解决方案是让scp使用的shell为bash即可。

知识点

1、scp,客户端使用ssh命令连接到远程服务器,并指定要复制的文件或目录,然后客户端和服务器之间建立了一个加密的连接,用于传输文件数据。在传输过程中,数据被加密以确保其安全性。

2、如果ssh只是在远程主机上执行交互命令并接收结果,那么是一个non-loginnon-interactive的shell。

3、login-shell会按如下顺序执行脚本:1)执行/etc/profile;2)执行/etc/profile.d/目录下所有脚本;3)执行用户所属的~/.bash_profile(这里它是优先级最高的,如果不存在则会按照优先级顺序读取~/.bash_login~/.profile);4)执行~/.bashrc;5)~/.bashrc执行/etc/bashrc(这是因为在rc文件里定义了读取/etc/bashrc

4、non-login shell会按如下顺序执行脚本:1)执行~/.bashrc;2)~/.bashrc执行/etc/bashrc

5、如何区分login-shellnon-login shell?参考文章。非登录交互式shell:ssh example.com <my-script-which-is-stored-locally;非登录非交互式shell:ssh example.com my-script-which-is-on-the-remote-machine

6、通常我们定制一些配置时,将配置写在~/.bashrc中,然后在~/.bash_profile中读取~/.bashrc,保证login-shell交互式non-login shell得到相同的配置。

问题解决

~/.bashrc中的exec zsh移动到~/.bash_profile中即可解决问题,并且可以反推出scp使用的是非登录交互式shell。

1、vim ~/.bash_profile

# 最后添加
exec $HOME/zsh-5.9/bin/zsh

2、vim ~/.bashrc

# 删除下面行
# exec $HOME/zsh-5.9/bin/zsh
posted @ 2024-05-01 17:24  sjmuvx  阅读(15)  评论(0编辑  收藏  举报