Файловые операции удаленного хоста через SSH2 в Java - PullRequest
2 голосов
/ 30 марта 2011

На данный момент у меня есть простая задача: подключиться к удаленному серверу и получить список файлов и их информацию (в частности, дату создания).

Пробовал JSch, но это похоже на написание приложения для Unix 20много лет назад.Хотел бы переключиться на sshj, поэтому, если это возможно, предоставьте некоторый код о том, как добиться хотя бы списка файлов и их информации (в идеале, я хотел бы получить массив объектов File).

Так как можноЯ достигаю цели?

Заранее спасибо.

ПРИМЕЧАНИЕ: AFAIU это возможно только при наличии ls на стороне сервера и его разборе, не так ли?

Ответы [ 3 ]

3 голосов
/ 30 марта 2011

Вот код для sftp (JSCH)

ChannelSftp sftp = (ChannelSftp)session.openChannel("sftp");<br> sftp.connect();<br> sftp.cd(DIRECTORY);<br> Vector v = null;<br> v = sftp.ls("*.txt"); //txt files only<br>

Использовать с ключевым файлом:
JSch jsch = new JSch();<br> jsch.setKnownHosts(myKonfig.getKnownHostsFile());<br> String privKeyFile = myKonfig.getPrivateKeyFile();<br> jsch.addIdentity(privKeyFile);<br>

3 голосов
/ 30 марта 2011

У них есть примеры, связанные с их исходным дистрибутивом.Вы смотрели их?Я нашел это через 2 минуты: sshj: как выполнить пример удаленной команды

Редактировать:

Хорошо, вы могли бы выполнить, например (основаниев приведенном мной примере):

final Command cmd = session.exec("ls -l /some/interesting/dir");
String lsOutput = cmd.getOutputAsString();

// parse lsOutput and extract required information
...

Нет более простого способа, если вы хотите сделать это поверх ssh, потому что он не имеет представления о файлах и т. д. Это просто удаленная оболочка.Может быть, sftp мог бы обеспечить лучший интерфейс здесь, но я не эксперт по sftp.

1 голос
/ 30 марта 2011

Упс, только что увидел, что он не возвращает время создания, только время модификации.

Если вы просто хотите получить информацию о файле из удаленной системы, я бы рекомендовал использовать класс SFTPClient, предоставляемый в sshj.

используйте:

SFTPClient.ls(directory)

команда, чтобы найти все удаленные файлы, затем используйте:

SFTPClient.stat(file)

для получения всей информации из удаленных файлов, включая дату изменения.

...