]> Joshua Wise's Git repositories - dumload.git/blame - src/com/jcraft/jsch/JSch.java
Initial commit.
[dumload.git] / src / com / jcraft / jsch / JSch.java
CommitLineData
0763e16d
JW
1/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */
2/*
3Copyright (c) 2002-2010 ymnk, JCraft,Inc. All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are met:
7
8 1. Redistributions of source code must retain the above copyright notice,
9 this list of conditions and the following disclaimer.
10
11 2. Redistributions in binary form must reproduce the above copyright
12 notice, this list of conditions and the following disclaimer in
13 the documentation and/or other materials provided with the distribution.
14
15 3. The names of the authors may not be used to endorse or promote products
16 derived from this software without specific prior written permission.
17
18THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
19INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
21INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
22INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
24OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
27EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*/
29
30package com.jcraft.jsch;
31
32import java.io.InputStream;
33import java.util.Vector;
34
35public class JSch{
36 static java.util.Hashtable config=new java.util.Hashtable();
37 static{
38// config.put("kex", "diffie-hellman-group-exchange-sha1");
39 config.put("kex", "diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1");
40 config.put("server_host_key", "ssh-rsa,ssh-dss");
41// config.put("server_host_key", "ssh-dss,ssh-rsa");
42
43 config.put("cipher.s2c",
44 "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc");
45 config.put("cipher.c2s",
46 "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc");
47
48 config.put("mac.s2c", "hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96");
49 config.put("mac.c2s", "hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96");
50 config.put("compression.s2c", "none");
51 // config.put("compression.s2c", "zlib@openssh.com,zlib,none");
52 config.put("compression.c2s", "none");
53 // config.put("compression.c2s", "zlib@openssh.com,zlib,none");
54
55 config.put("lang.s2c", "");
56 config.put("lang.c2s", "");
57
58 config.put("compression_level", "6");
59
60 config.put("diffie-hellman-group-exchange-sha1",
61 "com.jcraft.jsch.DHGEX");
62 config.put("diffie-hellman-group1-sha1",
63 "com.jcraft.jsch.DHG1");
64
65 config.put("dh", "com.jcraft.jsch.jce.DH");
66 config.put("3des-cbc", "com.jcraft.jsch.jce.TripleDESCBC");
67 config.put("blowfish-cbc", "com.jcraft.jsch.jce.BlowfishCBC");
68 config.put("hmac-sha1", "com.jcraft.jsch.jce.HMACSHA1");
69 config.put("hmac-sha1-96", "com.jcraft.jsch.jce.HMACSHA196");
70 config.put("hmac-md5", "com.jcraft.jsch.jce.HMACMD5");
71 config.put("hmac-md5-96", "com.jcraft.jsch.jce.HMACMD596");
72 config.put("sha-1", "com.jcraft.jsch.jce.SHA1");
73 config.put("md5", "com.jcraft.jsch.jce.MD5");
74 config.put("signature.dss", "com.jcraft.jsch.jce.SignatureDSA");
75 config.put("signature.rsa", "com.jcraft.jsch.jce.SignatureRSA");
76 config.put("keypairgen.dsa", "com.jcraft.jsch.jce.KeyPairGenDSA");
77 config.put("keypairgen.rsa", "com.jcraft.jsch.jce.KeyPairGenRSA");
78 config.put("random", "com.jcraft.jsch.jce.Random");
79
80 config.put("none", "com.jcraft.jsch.CipherNone");
81
82 config.put("aes128-cbc", "com.jcraft.jsch.jce.AES128CBC");
83 config.put("aes192-cbc", "com.jcraft.jsch.jce.AES192CBC");
84 config.put("aes256-cbc", "com.jcraft.jsch.jce.AES256CBC");
85
86 config.put("aes128-ctr", "com.jcraft.jsch.jce.AES128CTR");
87 config.put("aes192-ctr", "com.jcraft.jsch.jce.AES192CTR");
88 config.put("aes256-ctr", "com.jcraft.jsch.jce.AES256CTR");
89 config.put("3des-ctr", "com.jcraft.jsch.jce.TripleDESCTR");
90 config.put("arcfour", "com.jcraft.jsch.jce.ARCFOUR");
91 config.put("arcfour128", "com.jcraft.jsch.jce.ARCFOUR128");
92 config.put("arcfour256", "com.jcraft.jsch.jce.ARCFOUR256");
93
94 config.put("userauth.none", "com.jcraft.jsch.UserAuthNone");
95 config.put("userauth.password", "com.jcraft.jsch.UserAuthPassword");
96 config.put("userauth.keyboard-interactive", "com.jcraft.jsch.UserAuthKeyboardInteractive");
97 config.put("userauth.publickey", "com.jcraft.jsch.UserAuthPublicKey");
98
99 config.put("zlib", "com.jcraft.jsch.jcraft.Compression");
100 config.put("zlib@openssh.com", "com.jcraft.jsch.jcraft.Compression");
101
102 config.put("StrictHostKeyChecking", "ask");
103 config.put("HashKnownHosts", "no");
104 //config.put("HashKnownHosts", "yes");
105 config.put("PreferredAuthentications", "gssapi-with-mic,publickey,keyboard-interactive,password");
106
107 config.put("CheckCiphers", "aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256");
108 }
109 java.util.Vector pool=new java.util.Vector();
110 java.util.Vector identities=new java.util.Vector();
111 private HostKeyRepository known_hosts=null;
112
113 private static final Logger DEVNULL=new Logger(){
114 public boolean isEnabled(int level){return false;}
115 public void log(int level, String message){}
116 };
117 static Logger logger=DEVNULL;
118
119 public JSch(){
120
121 try{
122 String osname=(String)(System.getProperties().get("os.name"));
123 if(osname!=null && osname.equals("Mac OS X")){
124 config.put("hmac-sha1", "com.jcraft.jsch.jcraft.HMACSHA1");
125 config.put("hmac-md5", "com.jcraft.jsch.jcraft.HMACMD5");
126 config.put("hmac-md5-96", "com.jcraft.jsch.jcraft.HMACMD596");
127 config.put("hmac-sha1-96", "com.jcraft.jsch.jcraft.HMACSHA196");
128 }
129 }
130 catch(Exception e){
131 }
132
133 }
134
135 public Session getSession(String username, String host) throws JSchException { return getSession(username, host, 22); }
136 public Session getSession(String username, String host, int port) throws JSchException {
137 if(username==null){
138 throw new JSchException("username must not be null.");
139 }
140 if(host==null){
141 throw new JSchException("host must not be null.");
142 }
143 Session s=new Session(this);
144 s.setUserName(username);
145 s.setHost(host);
146 s.setPort(port);
147 //pool.addElement(s);
148 return s;
149 }
150
151 protected void addSession(Session session){
152 synchronized(pool){
153 pool.addElement(session);
154 }
155 }
156
157 protected boolean removeSession(Session session){
158 synchronized(pool){
159 return pool.remove(session);
160 }
161 }
162 public void setHostKeyRepository(HostKeyRepository hkrepo){
163 known_hosts=hkrepo;
164 }
165
166 public void setKnownHosts(String filename) throws JSchException{
167 if(known_hosts==null) known_hosts=new KnownHosts(this);
168 if(known_hosts instanceof KnownHosts){
169 synchronized(known_hosts){
170 ((KnownHosts)known_hosts).setKnownHosts(filename);
171 }
172 }
173 }
174
175 public void setKnownHosts(InputStream stream) throws JSchException{
176 if(known_hosts==null) known_hosts=new KnownHosts(this);
177 if(known_hosts instanceof KnownHosts){
178 synchronized(known_hosts){
179 ((KnownHosts)known_hosts).setKnownHosts(stream);
180 }
181 }
182 }
183
184 public HostKeyRepository getHostKeyRepository(){
185 if(known_hosts==null) known_hosts=new KnownHosts(this);
186 return known_hosts;
187 }
188
189 public void addIdentity(String prvkey) throws JSchException{
190 addIdentity(prvkey, (byte[])null);
191 }
192
193 public void addIdentity(String prvkey, String passphrase) throws JSchException{
194 byte[] _passphrase=null;
195 if(passphrase!=null){
196 _passphrase=Util.str2byte(passphrase);
197 }
198 addIdentity(prvkey, _passphrase);
199 if(_passphrase!=null)
200 Util.bzero(_passphrase);
201 }
202
203 public void addIdentity(String prvkey, byte[] passphrase) throws JSchException{
204 Identity identity=IdentityFile.newInstance(prvkey, null, this);
205 addIdentity(identity, passphrase);
206 }
207 public void addIdentity(String prvkey, String pubkey, byte[] passphrase) throws JSchException{
208 Identity identity=IdentityFile.newInstance(prvkey, pubkey, this);
209 addIdentity(identity, passphrase);
210 }
211
212 public void addIdentity(String name, byte[]prvkey, byte[]pubkey, byte[] passphrase) throws JSchException{
213 Identity identity=IdentityFile.newInstance(name, prvkey, pubkey, this);
214 addIdentity(identity, passphrase);
215 }
216
217 public void addIdentity(Identity identity, byte[] passphrase) throws JSchException{
218 if(passphrase!=null){
219 try{
220 byte[] goo=new byte[passphrase.length];
221 System.arraycopy(passphrase, 0, goo, 0, passphrase.length);
222 passphrase=goo;
223 identity.setPassphrase(passphrase);
224 }
225 finally{
226 Util.bzero(passphrase);
227 }
228 }
229 synchronized(identities){
230 if(!identities.contains(identity)){
231 identities.addElement(identity);
232 }
233 }
234 }
235
236 public void removeIdentity(String name) throws JSchException{
237 synchronized(identities){
238 for(int i=0; i<identities.size(); i++){
239 Identity identity=(Identity)(identities.elementAt(i));
240 if(!identity.getName().equals(name))
241 continue;
242 identities.removeElement(identity);
243 identity.clear();
244 break;
245 }
246 }
247 }
248
249 public Vector getIdentityNames() throws JSchException{
250 Vector foo=new Vector();
251 synchronized(identities){
252 for(int i=0; i<identities.size(); i++){
253 Identity identity=(Identity)(identities.elementAt(i));
254 foo.addElement(identity.getName());
255 }
256 }
257 return foo;
258 }
259
260 public void removeAllIdentity() throws JSchException{
261 synchronized(identities){
262 Vector foo=getIdentityNames();
263 for(int i=0; i<foo.size(); i++){
264 String name=((String)foo.elementAt(i));
265 removeIdentity(name);
266 }
267 }
268 }
269
270 public static String getConfig(String key){
271 synchronized(config){
272 return (String)(config.get(key));
273 }
274 }
275
276 public static void setConfig(java.util.Hashtable newconf){
277 synchronized(config){
278 for(java.util.Enumeration e=newconf.keys() ; e.hasMoreElements() ;) {
279 String key=(String)(e.nextElement());
280 config.put(key, (String)(newconf.get(key)));
281 }
282 }
283 }
284
285 public static void setConfig(String key, String value){
286 config.put(key, value);
287 }
288
289 public static void setLogger(Logger logger){
290 if(logger==null) JSch.logger=DEVNULL;
291 JSch.logger=logger;
292 }
293 static Logger getLogger(){
294 return logger;
295 }
296}
This page took 0.046233 seconds and 4 git commands to generate.