一次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-login
且non-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-shell
和non-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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)