2017.05.29 21:02:22字数 650阅读 3,647

1 Preface

因为ssh基于安全考虑,不支持参数指定密码(.bash_history可查看输入过的命令)。

2 PROBLEM

因为需要经常远程登录到vmware中Linux 服务器,每次都得输入一遍密码,比较麻烦!所以,想找找有没有什么方法,可以在调用ssh的时候就指定好密码,每次输入alias就好了。

3 Current Solutions

在网上搜一下,大致有3种方式。
方案一:通过ssh-keygen生成RSA,然后采用公钥登陆的。
方案二 (仅适用于*unix系统) :用Python的expect来发送密码验证,验证通过后,把控制权返还给终端。 Linux下一般使用sshpass(C language) ,还有 python 实现的 sshpass
方案三:采用putty.exe

4 Problem Analysis

1、最好弄成rsa公钥验证方式,达到ssh无密码登录。
2、ssh的密码输入是绑定到 TTY 而不是stdin 的,所以无法重定向(到管道)
  2.1、如果想通过程序输入ssh密码,那么就要模拟TTY,或者让ssh认为你的输入是直接来自TTY
  2.2、或者,你干脆自己实现个最简单的ssh协议吧
  2.3、程序模拟TTY,一般会直接采用expact库,这里一般采用python脚本。
3、登录之后,和ssh交互需要通过管道进行。

5 What I want

由于我想使用其他终端,不想改用putty的终端。继续google之后发现putty是调用plink.exe来进行登录的。继续搜索,发现plink支持命令行模式。

我喜欢的cmd

6 My Solution

命令行调用plink.exe登陆(其中 -C 表示压缩传输,-ssh表示采用ssh协议,-pw指定用户密码,-v表示打印日志)

plink -C -ssh -pw password username@192.168.1.184

(1) 安装putty.exe,取 plink.exe (version 0.69约0.6M)放在我的终端下,采用命令行方式调用。(其实只用到plink.exe)

bin

(2) 把上面的命令设置一条alias,这样每次可以输入别名来登陆了。

效果图

但是很悲伤,plink只是个简单的模拟器,并不支持查看输入过的命令(↑↓)。→_→
进一步探索发现plink是开源的,所以我们可以修改其源代码,使其支持查看历史命令
下面是我基于0.69,版本上修复(修复了该问题,但是还有个窗口大小改变的问题,后面有时间修复吧)

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐