Khi phải làm việc với nhiều server, chúng ta thường hay phải thực hiện lại một loạt các công việc nhàm chán ssh, login, …
Có nhiều cách để tự động hóa các thao tác này như sử dụng tool, viết file bash.
Bài viết này sẽ giới thiệu 1 phương án sử dụng poderosa kết hợp với macro viết bằng js.
### 1. Poderosa
Đây là 1 công cụ hỗ trợ kết nối server được sử dụng cực kỳ phổ biến tại Nhật cũng như nhiều nơi khác.
#### Một vài tính năng cơ bản
  • Telnet, SSH1, SSH2
  • Split screen, Reproduce
  • Change encoding (support utf-8, shilf-jis, iso-8859-1, euc-cn, euc-kr …)
### 2. HelloWorld !
 Trước tiên chúng ta sẽ thử thực hiện 1 file macro helloworld đơn giản.
Tạo mới 1 file Helloworld.js với nội dung bên dưới.
import Poderosa.Macro; var env = new Environment(); env.Util.MessageBox("Hello World!\n");
Thiết lập 1 macro mới

Tools -> Macro -> Environment

 [![poderosa1](https://i0.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/poderosa1.png?fit=681%2C334)](https://i0.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/poderosa1.png)
Đặt tên và chỉ định đường dẫn tới file js ở phía trên
[![Macro property 2016-05-23 09.30.16](https://i1.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/Macro-property-2016-05-23-09.30.16.png?fit=336%2C219)](https://i1.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/Macro-property-2016-05-23-09.30.16.png)
Chọn macro Helloworld và Execute
 [![Macro 2016-05-23 09.39.33](https://i2.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/Macro-2016-05-23-09.39.33.png?fit=512%2C350)](https://i2.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/Macro-2016-05-23-09.39.33.png)
Kết quả như bên dưới là file macro đã được thực thi ok.
[![Poderosa 2016-05-23 09.41.58](https://i0.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/Poderosa-2016-05-23-09.41.58.png?fit=176%2C158)](https://i0.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/Poderosa-2016-05-23-09.41.58.png)
### 3. Connect multiple Server
Ví dụ này sẽ thực hiện connect vào 2 máy ảo đã chuẩn bị sẵn
192.168.33.10 192.168.33.11 username: vagrant password: vagrant
 Thiết lập một số tham số sử dụng để truy cập (ssh port, ip, username, password). Tại đây bạn có thể dễ dàng thay đổi thành các giá trị phù hợp với nhu cầu của mình.
var SSH_PORT = 22; var IP_WEB = "192.168.33.10"; var IP_DB = "192.168.33.11"; var ADMIN_USER = "vagrant"; var ADMIN_PASS = "vagrant";
Chúng ta cũng có thể chuẩn bị sẵn các command sẽ được thực hiện như connect db, di chuyển đến thư mục chứa mã nguồn …
Ví dụ thực hiện sudo su – và di chuyển đến folder /var/www/ tại máy 192.168.33.10 sau mỗi lần đăng nhập
// commands hostList[0]['commands'] = new Array(); hostList[0]['commands'][0] = "sudo su - "; hostList[0]['commands'][1] = ADMIN_PASS; hostList[0]['commands'][2] = "cd /var/www/ ";
Toàn bộ file sẽ như sau:
/** * Auto connect to multiple servers */ import Poderosa; import Poderosa.ConnectionParam; import Poderosa.Terminal; import Poderosa.Macro; import System; // Setting default var env = new Environment(); var ENCODE_TYPE = EncodingType.UTF8; var NEWLINE_CHAR = NewLine.LF; var SSH_PORT = 22; var IP_WEB = "192.168.33.10"; var IP_DB = "192.168.33.11"; var ADMIN_USER = "vagrant"; var ADMIN_PASS = "vagrant"; var hostList = new Array(); var prompt = /\n[%$>] $/; var command1 = 'pwd'; // ---- Terminal 1 ---- hostList[0] = new Array(); hostList[0]['host'] = IP_WEB; hostList[0]['id'] = ADMIN_USER; hostList[0]['pwd'] = ADMIN_PASS; hostList[0]['title'] = "web-server"; // commands hostList[0]['commands'] = new Array(); hostList[0]['commands'][0] = "sudo su - "; hostList[0]['commands'][1] = ADMIN_PASS; hostList[0]['commands'][2] = "cd /var/www/ "; // ---- Terminal 2 ---- hostList[1] = new Array(); hostList[1]['host'] = IP_DB; hostList[1]['id'] = ADMIN_USER; hostList[1]['pwd'] = ADMIN_PASS; hostList[1]['title'] = "db-server"; // commands hostList[1]['commands'] = new Array(); hostList[1]['commands'][0] = "sudo su - "; hostList[1]['commands'][1] = ADMIN_PASS; hostList[1]['commands'][2] = "ls "; // Connect SSH for (var i = 0; i < hostList.length; i++) { var ssh_port_num = SSH_PORT; if (hostList[i]['port'] != null && hostList[i]['port'] != SSH_PORT) { ssh_port_num = hostList[i]['port']; } var encoding_type = ENCODE_TYPE; if (hostList[i]['encode'] != null && hostList[i]['encode'] != ENCODE_TYPE) { encoding_type = hostList[i]['encode']; } var newline_char = NEWLINE_CHAR; if (hostList[i]['newline_char'] != null && hostList[i]['newline_char'] != NEWLINE_CHAR) { newline_char = hostList[i]['newline_char']; } var conn = connect(hostList[i]['host'], ConnectionMethod.SSH2, ssh_port_num, encoding_type, newline_char, hostList[i]['id'], hostList[i]['pwd'], hostList[i]['title']); if (hostList[i]['commands']) { if (hostList[i]['commands'].length > 0) { for (var j = 0; j < hostList[i]['commands'].length; j ++) { sendln(hostList[i]['commands'][j], conn); } } } } env.Util.MessageBox("CONNECT OK!"); function connect(host, method, port, encoding, newline_char, id, password, title) { var param = new SSHTerminalParam(method, host, id, password); param.Caption = title+"["+host+"]"; param.Port = port; param.Encoding = encoding; param.TransmitNL = newline_char; var connection = env.Connections.Open(param); return connection; } function sendln(s, connection) { var line = ''; while(!line.match(prompt)) { var data = conn.ReceiveData(2000); // wait new data for 2 seconds if (data == null) { conn.TransmitLn(s); return false; } line += data; } return; }
 Xem thêm các ví dụ có sẵn trong thư mục cài đặt của poderosa
Poderosa\Macro\Sample
### 4. Nhược điểm
– Bản thân Poderosa cũng như API không còn được cập nhật
– Các tài liệu mô tả để sử dụng API gần như không có, chỉ còn cách tham khảo một số example.
### 5. Kết luận
– Poderosa dù đã nhiều tuổi và không thay đổi nhưng vẫn hữu ích trong nhiều trường hợp, đặc biệt là với những ai cần theo dõi nhiều server cùng lúc. Start macro rồi uống cafe thay vì hì hục ssh, su, service start …
– Với việc dễ dàng thêm list các command theo kịch bản đã định, poderosa with macro cũng rất tiện lợi cho một số case test cần lặp lại nhiều bước liên quan đến linux.
– Thẻ tab, và phân chia màn hình thành 2,3,4 phần tùy ý cũng là điểm vô cùng hấp dẫn của Poderosa.
[![Pederosa_demo1](https://i2.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/Pederosa_demo1-1024x870.png?fit=640%2C544)](https://i2.wp.com/vietnamlab.vn/wp-content/uploads/2016/05/Pederosa_demo1.png)*Màn hình yêu thích của người viết.*
*Tham khảo*
http://poderosa.sourceforge.net/index.html.en
https://github.com/poderosaproject/