在实验室与服务器传输文件时一般使用的都是WinSCP这个开源软件,界面友好而且自带中文。我们的服务器早先安全意识较差,开放了root的ssh远程登录,虽然有安全隐患,但倒也方便。

后来老师突发奇想,限制了root用户的远程登录,但是重要的数据文件都是700,这可害苦了我们,每次只有先用普通账户登录,然后再su到root下。这也就算了,更可悲的是,WinSCP完全失去了用武之地。因为root账户无法登陆,而像是FTP,SFTP,SCP这些协议都不支持在登录以后切换用户。

不过天无绝人之路,某C很快在WInSCP官网的FAQ里找到了这个网页:

SCP协议在登录的时候可以指定shell,一般默认的也就是推荐的是/bin/bash,但是我们可以修改它来玩花样,比如改成sudo su -

但是问题又来了,sudo需要输入密码,但是WinSCP在登录的时候并没有交互过程。聪明的你一定已经想到了,只要在root权限下visudo,添加如下一行即可取消sudu时的密码:
yourusername ALL=NOPASSWD: ALL

为了可以在非tty的环境下sudo,我们还需要注释掉下面一行:
Defaults requiretty

然后保存,即可在登录到WinSCP的时候享受root的快感啦!


<script type="math/tex; mode=display" id="MathJax-Element-1"></script>

<script type="math/tex; mode=display" id="MathJax-Element-2"></script>

<script type="math/tex; mode=display" id="MathJax-Element-3"></script>

<script type="math/tex; mode=display" id="MathJax-Element-4"></script>

<script type="math/tex; mode=display" id="MathJax-Element-5"></script>

<script type="math/tex; mode=display" id="MathJax-Element-6"></script>$$ root 分割线 #############################

总而言之,有以下几步:
1.普通用户ssh到服务器,切换到root权限
2.visudo,然后添加 yourusername ALL=NOPASSWD: ALL 这一行,注释掉Defaults requiretty
3.修改WinSCP的文件协议为SCP
4.修改环境-SCP/Shell下的shell为sudo su-
5.登录WinSCP即可。