我需要连接到服务器(用户名,密码,主机) - 简单
输入3-10命令 - command ="dir; date; cd; dir"是否有更简单的方法?,不写20行:while(smtng){很多东西+神秘的打印到scr:D}
下载文件 - 简单
将另一个下载的文件写入同一个文件(添加不是owerride) - 任何想法如何?
因此,为了执行这些可增加的简单任务,如果您敢于使用Jsch(awsome文档),这似乎是不可能的,Jsch,sshj,Ganymed之间有选择任何建议吗?
神秘:
2)多个命令进入
4)在现有的txt文件中添加更多txt:D(可能还有一个内置命令)或不?
/* just for download/owerride : sftpChannel.get("downloadfile.txt", "savefile.txt");*/
Run Code Online (Sandbox Code Playgroud) 我使用sshj和我试图拖尾文件,但我的问题是远程进程永远不会被杀死.
在下面的示例代码中,您可以看到我尝试tail/var/log/syslog,然后我向进程发送一个kill信号.但是,在应用程序停止并列出服务器上的所有进程后,我仍然可以看到一个活动的尾部进程.
为什么这段代码不会杀死进程?我该怎么做才能解决这个问题呢?
SSHClient ssh = new SSHClient();
ssh.addHostKeyVerifier(new PromiscuousVerifier());
try {
ssh.connect("localhost");
ssh.authPassword("xxx", "xxx");
final Session session = ssh.startSession();
try {
final Command cmd = session.exec("tail -f /var/log/syslog");
cmd.signal(Signal.KILL);
System.out.println("\n** exit status: " + cmd.getExitStatus());
} catch (IOException e) {
e.printStackTrace();
}finally{
session.close();
}
} finally{
ssh.disconnect();
}
Run Code Online (Sandbox Code Playgroud)
编辑
还尝试发送所有可用信号.
for(Signal s : Signal.values()){
cmd.signal(s);
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用SSHJ进行SFTP传输的库.由于请求频繁,我想知道我是否可以保持连接打开.
显然,如果服务器频繁超时,这将无法实现.由于我无法控制服务器,因此我必须保持连接处于活动状态:使用常规SSH客户端,我可以指定一个ServerAliveInterval并让客户端为我执行此操作.
我想用SSHJ做同样的事情,但我不知道要发送什么消息.
该SSH手册只是说ServerAliveInterval
设置超时间隔(以秒为单位),之后如果没有从服务器收到数据,ssh(1)将通过加密通道发送消息以请求服务器响应.
所以我想知道:发送了什么消息?我怎么能通过SSHJ重现这个消息?
我正在尝试编写一个java程序,它将通过ssh连接并在工作的服务器上做一些事情(redhat linux).我的盒子是窗户.我读到了sshj,我正试图让这个例子起作用.我已经完成了大多数依赖项,现在我在处理公钥/私钥时出错了,不幸的是我也不太了解(是的,这是一个完美的新手风暴!).这是错误:
例外在线程"主" net.schmizz.sshj.transport.TransportException:[HOST_KEY_NOT_VERIFIABLE]无法验证ssh-rsa与指纹主机密钥5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d用于myserver在端口22
这是代码:
import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.common.IOUtils;
import net.schmizz.sshj.connection.channel.direct.Session;
import net.schmizz.sshj.connection.channel.direct.Session.Command;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/** This examples demonstrates how a remote command can be executed. */
public class sshBuddy {
public static void main(String... args)
throws IOException {
final SSHClient ssh = new SSHClient();
ssh.loadKnownHosts();
//ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d");
ssh.connect("myserver");
try {
ssh.authPublickey(System.getProperty("myusername"));
final Session session = ssh.startSession();
try {
final Command cmd = session.exec("ping -c 1 google.com");
System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
cmd.join(5, TimeUnit.SECONDS);
System.out.println("\n** exit status: …Run Code Online (Sandbox Code Playgroud) 如果有人知道如何将远程文件直接流式传输到文件对象的快速方法,那么没有必要将文件临时存储在计算机上,我们将不胜感激!到目前为止,我从远程ios设备复制文件如下(使用net.schmizz.sshj):
SSHClient ssh = new SSHClient();
ssh.addHostKeyVerifier(fingerprint);
ssh.connect(ip);
try {
ssh.authPassword("username", "userpassword".toCharArray());
ssh.newSCPFileTransfer().download(fileRemote, new FileSystemFile(fileLocal));
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
ssh.disconnect();
}
Run Code Online (Sandbox Code Playgroud)
如果有人对解决方案的代码感兴趣:
正如Nutlike在回答中提到的那样,最好使用它InMemoryDestFile.所以创建以下类:
class MyInMemoryDestFile extends InMemoryDestFile {
public ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
@Override
public ByteArrayOutputStream getOutputStream() throws IOException {
return this.outputStream;
}
}
Run Code Online (Sandbox Code Playgroud)
...在执行下载操作的方法中,创建新类的实例:
MyInMemoryDestFile a = new StreamingInMemoryDestFile();
Run Code Online (Sandbox Code Playgroud)
并访问输出流:
ssh.newSCPFileTransfer().download(remoteFile, a);
a.getOutputStream().toByteArray();
Run Code Online (Sandbox Code Playgroud)
最好的祝福
到目前为止,我可以更改默认配置的记录器级别或为 sshj 库禁用它吗?
Config config = new DefaultConfig();
config.setKeepAliveProvider(KeepAliveProvider.KEEP_ALIVE);
SSHClient sshClient = new SSHClient(config);
Run Code Online (Sandbox Code Playgroud)
当我尝试上面的代码时,我遇到了这些问题:
[main] WARN net.schmizz.sshj.DefaultConfig - Illegal key size
[main] WARN net.schmizz.sshj.DefaultConfig - Illegal key size
[main] WARN net.schmizz.sshj.DefaultConfig - Illegal key size
[main] WARN net.schmizz.sshj.DefaultConfig - Illegal key size
[main] WARN net.schmizz.sshj.DefaultConfig - Illegal key size
[main] WARN net.schmizz.sshj.DefaultConfig - No such algorithm: IDEA/CBC/NoPadding
[main] WARN net.schmizz.sshj.DefaultConfig - No such algorithm: IDEA/CTR/NoPadding
[main] WARN net.schmizz.sshj.DefaultConfig - Illegal key size
[main] WARN net.schmizz.sshj.DefaultConfig - Illegal key size …Run Code Online (Sandbox Code Playgroud) 我正在使用库sshj发送scp命令.它使用选项-f从服务器下载到另一个服务器.我找不到男人的-f选项.
scp命令中-f的含义是什么?
如何使用sshj java api连接用户名和密码的远程机器?
我试过这段代码.这段代码有什么问题?
final SSHClient ssh = new SSHClient();
ssh.connect("192.168.0.1");
ssh.authPassword("abcde", "fgh".toCharArray());
try {
final Session session = ssh.startSession();
try {
final Command cmd = session
.exec("cd /home/abcde/Desktop/");
System.out.println(IOUtils.readFully(cmd.getInputStream())
.toString());
cmd.join(5, TimeUnit.SECONDS);
System.out.println("\n** exit status: " + cmd.getExitStatus());
} finally {
session.close();
}
} finally {
ssh.disconnect();
}
Run Code Online (Sandbox Code Playgroud)
它抛出以下错误.
net.schmizz.sshj.transport.TransportException:[HOST_KEY_NOT_VERIFIABLE]无法验证
ssh-rsa与指纹主机密钥********用于192.168.0.1在端口22
我正在尝试使用身份字符串 SFTP 到服务器:SSH-2.0-AWS_SFTP_1.0 使用 sshj 使用以下 Java 代码。
<dependency>
<groupId>com.hierynomus</groupId>
<artifactId>sshj</artifactId>
<version>0.29.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
private SSHClient setupSshj(String remoteHost, String username, String password) throws IOException {
SSHClient client = new SSHClient();
client.addHostKeyVerifier(new PromiscuousVerifier());
client.connect(remoteHost);
client.authPassword(username, password);
return client;
}
public void sftpfiles() throws IOException {
if (Boolean.parseBoolean(GetConfigValue("dds", "sendFiles"))) {
SSHClient sshClient = setupSshj(GetConfigValue("dds", "RemoteAddress"), GetConfigValue("dds", "RemoteLogin"), GetConfigValue("dds", "RemotePassword"));
SFTPClient sftpClient = sshClient.newSFTPClient();
sftpClient.put("/home/vm/test.txt", GetConfigValue("dds", "RemoteDirectory"));
sftpClient.close();
sshClients.disconnect();
}
}
Run Code Online (Sandbox Code Playgroud)
并得到错误
错误 SETSTAT 不受支持
我知道 AWS 服务不允许在上传时设置时间戳,但是我不知道需要进行哪些调整才能配置 SFTP 客户端。
问候康泰
我想在Java中运行SSH,但我还没想出如何运行包含命令和文件的SSH语句.例如,在标准终端中的命令:
ssh user@host 'upload' < myfile.txt
Run Code Online (Sandbox Code Playgroud)
希望通过Java库,而不是某种类型的Runtime.exec()