zhangjn
2018-08-31 16:03:05 +08:00
putty 的 pageant 有管理密钥的功能,只要一开始输入一次 key 的密码就行。
openssh 有个对应的 ssh-agent
直接用密码的时候为了不用输入密码,我魔改了 openssh,用环境变量当密码, 比改称用参数稍微安全一丁点
PS: 用 LFS ( linux from scratch )就是这点方便,就是全构建一次要几个小时
魔改 patch 如下, 你可以照猫画虎把 key 密码的读取也改成这样的
```
diff -urz openssh-7.7p1.orig/readpass.c openssh-7.7p1/readpass.c
--- openssh-7.7p1.orig/readpass.c
+++ openssh-7.7p1/readpass.c
@@ -47,9 +47,17 @@
#include "ssh.h"
#include "uidswap.h"
+static char *_env_pass(void)
+{
+ return getenv("_SSH_PASS"); // 运行的时候 _SSH_PASS=<password> ssh username@host 就行了
+}
+
static char *
ssh_askpass(char *askpass, const char *msg)
{
+ if(_env_pass())
+ return xstrdup(_env_pass());
+
pid_t pid, ret;
size_t len;
char *pass;
@@ -118,6 +126,13 @@ ssh_askpass(char *askpass, const char *m
char *
read_passphrase(const char *prompt, int flags)
{
+ if (_env_pass()) {
+ if (strstr(prompt, "Please type 'yes'")) {
+ return xstrdup("yes");
+ }
+ return xstrdup(_env_pass());
+ }
+
char *askpass = NULL, *ret, buf[1024];
int rppflags, use_askpass = 0, ttyfd;
@@ -169,6 +184,9 @@ read_passphrase(const char *prompt, int
int
ask_permission(const char *fmt, ...)
{
+ if(_env_pass())
+ return 1;
+
va_list args;
char *p, prompt[1024];
int allowed = 0;
```