equal
deleted
inserted
replaced
13 |
13 |
14 object SSH |
14 object SSH |
15 { |
15 { |
16 /* init */ |
16 /* init */ |
17 |
17 |
18 def apply(config_dir: Path = Path.explode("~/.ssh"), |
18 def init(config_dir: Path = Path.explode("~/.ssh"), |
19 config_file: Path = Path.explode("~/.ssh/config"), |
19 config_file: Path = Path.explode("~/.ssh/config"), |
20 identity_files: List[Path] = |
20 identity_files: List[Path] = |
21 List("~/.ssh/id_dsa", "~/.ssh/id_ecdsa", "~/.ssh/id_rsa").map(Path.explode(_))): SSH = |
21 List("~/.ssh/id_dsa", "~/.ssh/id_ecdsa", "~/.ssh/id_rsa").map(Path.explode(_))): SSH = |
22 { |
22 { |
23 if (!config_dir.is_dir) error("Bad ssh config directory: " + config_dir) |
23 if (!config_dir.is_dir) error("Bad ssh config directory: " + config_dir) |
60 } |
60 } |
61 |
61 |
62 |
62 |
63 /* session */ |
63 /* session */ |
64 |
64 |
65 class Session private[SSH](val jsch: JSch, val session: JSch_Session) |
65 class Session private[SSH](val session: JSch_Session) |
66 { |
66 { |
67 override def toString: String = |
67 override def toString: String = |
68 (if (session.getUserName == null) "" else session.getUserName + "@") + |
68 (if (session.getUserName == null) "" else session.getUserName + "@") + |
69 (if (session.getHost == null) "" else session.getHost) + |
69 (if (session.getHost == null) "" else session.getHost) + |
70 (if (session.getPort == 22) "" else ":" + session.getPort) |
70 (if (session.getPort == 22) "" else ":" + session.getPort) + |
|
71 (if (session.isConnected) "" else " (disconnected)") |
71 |
72 |
72 def open: Session = { session.connect; this } |
73 def close { session.disconnect } |
73 def close: Session = { session.disconnect; this } |
|
74 |
74 |
75 def channel_exec: ChannelExec = |
75 def channel_exec: ChannelExec = |
76 session.openChannel("exec").asInstanceOf[ChannelExec] |
76 session.openChannel("exec").asInstanceOf[ChannelExec] |
77 |
77 |
78 def channel_sftp: ChannelSftp = |
78 def channel_sftp: ChannelSftp = |
90 } |
90 } |
91 } |
91 } |
92 |
92 |
93 class SSH private(val jsch: JSch) |
93 class SSH private(val jsch: JSch) |
94 { |
94 { |
95 def session(host: String, port: Int = 22, user: String = null, |
95 def open_session(host: String, port: Int = 22, user: String = null, |
96 compression: Boolean = true): SSH.Session = |
96 compression: Boolean = true): SSH.Session = |
97 { |
97 { |
98 val session = jsch.getSession(user, host, port) |
98 val session = jsch.getSession(user, host, port) |
99 |
99 |
100 session.setUserInfo(SSH.No_User_Info) |
100 session.setUserInfo(SSH.No_User_Info) |
101 session.setConfig("MaxAuthTries", "3") |
101 session.setConfig("MaxAuthTries", "3") |
104 session.setConfig("compression.s2c", "zlib@openssh.com,zlib,none") |
104 session.setConfig("compression.s2c", "zlib@openssh.com,zlib,none") |
105 session.setConfig("compression.c2s", "zlib@openssh.com,zlib,none") |
105 session.setConfig("compression.c2s", "zlib@openssh.com,zlib,none") |
106 session.setConfig("compression_level", "9") |
106 session.setConfig("compression_level", "9") |
107 } |
107 } |
108 |
108 |
109 new SSH.Session(jsch, session) |
109 session.connect |
|
110 new SSH.Session(session) |
110 } |
111 } |
111 } |
112 } |