安装及创建
npm install ssh2
var Client = require('ssh2').Client;
var conn = new Client();
连接
/** 接受一个连接配置对象
* host?: string; 域名或者ip地址
* port?: number; 端口号
* forceIPv4?: boolean; 仅解析连接ipv4地址的域名或者ip地址
* forceIPv6?: boolean; 仅解析连接ipv6地址的域名或者ip地址
* hostHash?: "md5" | "sha1"; 选择加密方式加密主机密钥给hostVerifier
* hostVerifier?: (keyHash: string) => boolean; 检测主机密钥合法性
* username?: string; 远程服务器账号
* password?: string; 远程服务器密码
* agent?: string; ssh代理,用于用户身份验证或在Windows上使用Pagent时为“Pagent”
* privateKey?: Buffer | string; 包含用于基于密钥或基于主机的用户身份验证的私钥
* passphrase?: string; 用来解密的私钥
* localHostname?: string; 与“localUsername”和“privateKey”一起,将其设置为非空字符串,以便进行基于主机的用户身份验证。
* localUsername?: string; 与“localHostname”和“privateKey”一起,将其设置为非空字符串,以便进行基于主机的用户身份验证。
* tryKeyboard?: boolean; 如果用户身份验证方法失败,请尝试键盘交互式用户身份验证
*/
conn.connect(ConnectConfig)
ssh2常用API
- 执行远程服务指令
exec(command: string, callback: (err: Error | undefined, channel: ClientChannel) => void): boolean;
command要执行的指令;如: ls -al,cd
callback执行完回调函数;返回错误或者执行流
conn.on('ready', function() {
console.log('Client :: ready');
conn.exec('uptime', function(err, stream) {
if (err) throw err;
stream.on('close', function(code, signal) {
console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
conn.end();
}).on('data', function(data) {
console.log('STDOUT: ' + data);
}).stderr.on('data', function(data) {
console.log('STDERR: ' + data);
});
});
}).connect({
host: '192.168.100.100',
port: 22,
username: 'frylock',
privateKey: require('fs').readFileSync('/here/is/my/key')
});
// example output:
// Client :: ready
// STDOUT: 17:41:15 up 22 days, 18:09, 1 user, load average: 0.00, 0.01, 0.05
//
// Stream :: exit :: code: 0, signal: undefined
// Stream :: close
- 操作远程服务器文件 sftp
callback执行完回调函数;返回错误或者SFTPWrapper执行流
sftp(callback: (err: Error | undefined, sftp: SFTPWrapper) => void): boolean;
conn.on('ready', function() {
console.log('Client :: ready');
conn.sftp(function(err, sftp) {
if (err) throw err;
// 业务逻辑
});
}).connect({
host: '192.168.100.100',
port: 22,
username: 'frylock',
privateKey: require('fs').readFileSync('/here/is/my/key')
});
- 上传文件
localPath要上传的本地文件路径;如:${__dirname}/test.txt
remotePath要上传远程服务器文件路径;如:/home/xx/test.txt
callback执行完回调函数;返回错误
fastPut(localPath: string, remotePath: string, callback: (err: any) => void): void;
conn.on('ready', function() {
console.log('Client :: ready');
conn.sftp(function(err, sftp) {
if (err) throw err;
sftp.fastPut(`${__dirname}/text.txt`,"/home/xx/text.txt",
(err) => {console.log(err)})
});
}).connect({
host: '192.168.100.100',
port: 22,
username: 'frylock',
privateKey: require('fs').readFileSync('/here/is/my/key')
});
- 下载远程文件
localPath要上传的本地文件路径;如:${__dirname}/test.txt
remotePath要上传远程服务器文件路径;如:/home/xx/test.txt
callback执行完回调函数;返回错误
fastGet(remotePath: string, localPath: string, callback: (err: any) => void): void;
conn.on('ready', function() {
console.log('Client :: ready');
conn.sftp(function(err, sftp) {
if (err) throw err;
sftp.fastGet("/home/xx/text.txt",`${__dirname}/text.txt`,
(err) => {console.log(err)})
});
}).connect({
host: '192.168.100.100',
port: 22,
username: 'frylock',
privateKey: require('fs').readFileSync('/here/is/my/key')
});