-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
the following patch extends the user at host syntax on the ssh command line to
allow an additional HostKeyAlias and Port to be given as a single argument, eg:
ssh user at localhost%8022,www.tdl.com
is equivalent to
ssh -o 'HostKeyAlias www.tdl.com' -p 8022 user at localhost
The patch is particularly useful when ssh is called from other programs or
scripts and the ssh connection is to be established on top of a tunnel.
Consider for example a CVS repository that is connected using ssh through
a tunnel. The CVS/Root file contains the path to the CVS root as:
user at www.tld.com:/path/to/cvs
There is no way to specify a port number or a HostKeyAlias. With the patch
the CVS/Root can contain:
user at localhost%8022,www.tld.com:/path/to/cvs
and the connection is made through the tunnel.
I know I can achieve a similar result using .ssh/config:
Host host_nickname
Hostname localhost
Port 8022
HostKeyAlias www.tld.com
and specify the CVS root as user at host_nickname:/path/to/cvs
However, I think my patch is rather a feature than a bug. Are there any
chances to get it included in openssh?
Torsten
diff -Naur openssh-3.9p1/ssh.c openssh-3.9p1.new/ssh.c
- --- openssh-3.9p1/ssh.c 2004-08-15 09:23:34.000000000 +0200
+++ openssh-3.9p1.new/ssh.c 2004-09-08 16:12:58.000000000 +0200
@@ -157,7 +157,8 @@
"usage: ssh [-1246AaCfghkMNnqsTtVvXxY] [-b bind_address] [-c
cipher_spec]\n"
" [-D port] [-e escape_char] [-F configfile] [-i
identity_file]\n"
" [-L port:host:hostport] [-l login_name] [-m mac_spec] [-o
option]\n"
- -" [-p port] [-R port:host:hostport] [-S ctl] [user@]hostname
[command]\n"
+" [-p port] [-R port:host:hostport] [-S ctl]\n"
+" [user@]hostname[%%port][,host_key_alias] [command]\n"
);
exit(1);
}
@@ -176,7 +177,7 @@
int i, opt, exit_status;
u_short fwd_port, fwd_host_port;
char sfwd_port[6], sfwd_host_port[6];
- - char *p, *cp, *line, buf[256];
+ char *p, *cp, *line, buf[256], *host_key_aliasp;
struct stat st;
struct passwd *pw;
int dummy;
@@ -474,6 +475,28 @@
host = ++cp;
} else
host = *av;
+
+ host_key_aliasp = 0;
+ if (strrchr(host, '%')) {
+ cp = strrchr(host, '%');
+ *cp++ = '\0';
+ if (strrchr(cp, ',')) {
+ host_key_aliasp = strrchr(cp, ',');
+ *host_key_aliasp++ = '\0';
+ }
+ options.port = a2port(cp);
+ if (options.port == 0) {
+ fprintf(stderr, "Bad port '%s'\n", cp);
+ exit(1);
+ }
+ } else if (strrchr(host, ',')) {
+ host_key_aliasp = strrchr(host, ',');
+ *host_key_aliasp++ = '\0';
+ }
+
+ if (host_key_aliasp)
+ options.host_key_alias = xstrdup(host_key_aliasp);
+
if (ac > 1) {
optind = optreset = 1;
goto again;
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFBPybHwicyCTir8T4RAjo+AKCS/aowItuYao9OVIWtOx1KrEKdpgCfX7ev
DpGUBfblAUpXfJSWsgSdwo0=nnlY
-----END PGP SIGNATURE-----