背景
这个问题在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
标签:shell,bashrc,ssh,服务器,login,zsh,scp
From: https://www.cnblogs.com/sjmuvx/p/18169488