我知道有重复的 >>> 从重复的 >>> 复制,只要您的本地计算机有一个正在运行的 SSH 服务器
它说“只要你的本地机器有运行的 SSH 服务器”,但我不知道如何运行 SSH 服务器。我打开我的腻子(双击它)(不确定这是否意味着 SSH(?腻子?)服务器(?)正在运行...怀疑所以...
我对套接字编程真的很陌生。我正在利用 JSch (http://www.jcraft.com/jsch/ http://www.jcraft.com/jsch/)尝试连接到远程服务器(后期)
目前,这是我使用的代码,我尝试连接到我的本地计算机并执行命令(确切地说是 ls )来进行测试。但是,我一直点击连接被拒绝。我用谷歌搜索,注意到有一些文章提到“让服务器监听”,但我不知道它是什么意思。请查看我的代码,如下所示。
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import com.jcraft.jsch.*;
class SwingWorkerExample {
JTextField hostField;
JTextField userNameField;
JTextField passwordField;
JPanel panel;
public SwingWorkerExample() {
JPanel p = panel = new JPanel(new GridLayout(0,2));
hostField = new JTextField(20);
userNameField = new JTextField(20);
passwordField = new JPasswordField(20);
JButton testButton = new JButton("connect!");
testButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
testConnectionButtonActionPerformed(ev);
}
});
p.add(new JLabel("host:"));
//127.0.0.1
p.add(hostField);
p.add(new JLabel("user:"));
//mycomputerusername
p.add(userNameField);
p.add(new JLabel("password:"));
//mycomputerpassword
p.add(passwordField);
p.add(testButton);
}
public JPanel getPanel() {
return panel;
}
private void testConnectionButtonActionPerformed(ActionEvent evt) {
SwingWorker sw = new SwingWorker(){
protected Object doInBackground() throws Exception {
try {
JSch jsch = new JSch();
String host = hostField.getText();
String username = userNameField.getText();
String password = passwordField.getText();
Session session = jsch.getSession(username, host);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(20000);
System.out.println("Connecting to server...");
session.connect();
return session;
}
catch(Exception ex) {
ex.printStackTrace();
throw ex;
}
}
public void done(){
try {
System.out.println(get());
} catch (Exception ex) {
ex.printStackTrace();
}
}
};
sw.execute();
}
public static void main(String[] egal) {
EventQueue.invokeLater(new Runnable(){public void run() {
SwingWorkerExample ex = new SwingWorkerExample();
JFrame f = new JFrame("bla");
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
f.setContentPane(ex.getPanel());
f.pack();
f.setVisible(true);
}});
}
public void remoteLs() throws JSchException, IOException {
JSch js = new JSch();
Session s = js.getSession("kellyseo", "192.168.0.103", 22);
s.setPassword("S9031808z");
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
s.setConfig(config);
s.connect();
Channel c = s.openChannel("exec");
ChannelExec ce = (ChannelExec) c;
ce.setCommand("ls -l");
ce.setErrStream(System.err);
ce.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(ce.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
ce.disconnect();
s.disconnect();
System.out.println("Exit code: " + ce.getExitStatus());
}
public void remoteMkdir() throws JSchException, IOException {
JSch js = new JSch();
Session s = js.getSession("myusername", "myremotemachine.mycompany.com", 22);
s.setPassword("mypassword");
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
s.setConfig(config);
s.connect();
Channel c = s.openChannel("exec");
ChannelExec ce = (ChannelExec) c;
ce.setCommand("mkdir remotetestdir");
ce.setErrStream(System.err);
ce.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(ce.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
ce.disconnect();
s.disconnect();
System.out.println("Exit code: " + ce.getExitStatus());
}
public void remoteCopy() throws JSchException, IOException, SftpException {
JSch js = new JSch();
Session s = js.getSession("myusername", "myremotemachine.mycompany.com", 22);
s.setPassword("mypassword");
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
s.setConfig(config);
s.connect();
Channel c = s.openChannel("sftp");
ChannelSftp ce = (ChannelSftp) c;
ce.connect();
ce.put("/home/myuser/test.txt","test.txt");
ce.disconnect();
s.disconnect();
}
}
顺便说一句,我使用命令提示符 ping 127.0.0.1 没问题,但如果我使用 telnet 127.0.0.1,它会显示无法打开与主机的连接(我打开了 putty(?双击?),在端口 23 上:连接失败。
并且,SSH = PUTTY ...对吗? (我无法在命令提示符中使用“ssh”命令)
链接:
1)http://sourceforge.net/p/jsch/mailman/message/31745775/ http://sourceforge.net/p/jsch/mailman/message/31745775/
and 2) http://javarevisited.blogspot.sg/2013/02/java-net-ConnectException-Connection-refused.html http://javarevisited.blogspot.sg/2013/02/java-net-ConnectException-Connection-refused.html
and 3) http://www.jcraft.com/jsch/examples/ http://www.jcraft.com/jsch/examples/和 4)使用 JSch 通过 SSH 运行命令 https://stackoverflow.com/questions/2405885/any-good-jsch-examples和 5)我们可以使用 JSch 进行基于 SSH 密钥的通信吗? https://stackoverflow.com/questions/4932005/can-we-use-jsch-for-ssh-key-based-communication
而且...提前致谢!!
哦,还有http://www.ganymed.ethz.ch/ssh2/ http://www.ganymed.ethz.ch/ssh2/(JSch 的替代方案......欢迎任何建议!)但是当我尝试运行该示例时,它说没有 main。哪个..我不知道>.
顺便说一句,我尝试https://serverfault.com/questions/185153/free-public-ssh-server-for-testing- Purposes https://serverfault.com/questions/185153/free-public-ssh-server-for-testing-purposes对于服务器,但是...我不知道地址、用户名和密码是什么。 (我也有一个http://sdf.org http://sdf.org帐户新创建的但当我尝试连接到它时,它说未知主机。供参考!)
忘了提及,我使用的是 Windows 7,并且“yum”不是我的命令提示符中的命令...