Chuyển file với SSH

Sáng Chủ Nhật trời dịu mát không có nắng, sau khi mang con ngựa sắt lấm lem đi tẩy trần, tôi chui vào quán cà phê wifi khá lớn ở cuối đường D2. Không gian đặc quánh tiếng nhạc, thoang thoảng mùi thuốc lá (kinh khủng!), tôi chọn một góc vắng nhìn ra đường qua tấm cửa sổ kính to rồi mở máy và gọi một ly cà phê sữa đá. Duyệt qua blog kỹ thuật, tôi thấy có một bạn comment trong bài Sử dụng Linux trên máy ảo VMWare với câu hỏi như sau:

Chi cho minh hoi 1 cau nho thoi. Sao minh khong dung luon SSH de truyen file giua Window va Linux??? Cai them FTP nua cuc qua ma. Xin noi lai, day chi la thec mec, khong co y gi, vi minh xai cai OpenSSH thi thay co phan File Transfer.


Một câu hỏi rất hay, và như tôi đã comment trả lời cho bạn đó, câu hỏi làm tôi phải xem lại những công cụ truyền tải file mà mình đã sử dụng và tìm câu trả lời SSH có thể dùng để truyền file được không? Với thói quen nhiều chuyện :p, tôi quyết định viết luôn một bài cho đã.

Câu trả lời là có thể. Vậy tại sao tôi không dùng ngay SSH để truyền file giữa Windows và máy ảo Linux? Bởi vì một lý do đơn giản là ở thời điểm viết bài đó tôi không biết sử dụng một chương trình truyền file nào khác ngoài ftp :p, còn SSH với tôi là một công cụ để đăng nhập từ xa không hơn không kém (tôi cũng không để ý trong PuTTY có option chuyển file hay không nữa!), và tôi viết bài đó dựa trên kinh nghiệm bản thân chứ không tham khảo bài nào khác (bài đó tôi viết cách đây gần hai năm). Vậy thì nhân cơ hội này coi như là một bổ sung cho bài viết về máy ảo và ta tìm hiểu thêm vài thứ liên quan đến SSH và truyền file luôn thể.

Bản thân SSH là một giao thức chịu trách nhiệm thiết lập kênh kết nối bảo mật để chạy các dịch vụ trên kết nối đó, và SSH không giới hạn các dịch vụ có thể chạy trên nó, mà truyền file là một dịch vụ trong số đó.

Secure Shell (SSH) is a protocol for secure remote login and other secure network services over an insecure network.

Giao thức SSH gồm có các thành phần chính sau:

  • The Transport Layer Protocol [SSH-TRANS] provides server authentication, confidentiality, and integrity. It may optionally also provide compression. The transport layer will typically be run over a TCP/IP connection, but might also be used on top of any other reliable data stream.
  • The User Authentication Protocol [SSH-USERAUTH] authenticates the client-side user to the server. It runs over the transport layer protocol.
  • The Connection Protocol [SSH-CONNECT] multiplexes the encrypte tunnel into several logical channels. It runs over the user authentication protocol.

Trong đó hai phần đầu cung cấp kênh kết nối bảo mật và phần thứ ba, connection protocol sẽ cung cấp kênh truyền cho các dịch vụ chạy trong kênh truyền đó. Như vậy trên lý thuyết nếu ta có một dịch vụ có truyền dữ liệu qua mạng thì ta có thể sử dụng nó một cách bảo mật bằng cách kết hợp với SSH. Chúng hoạt động theo nguyên tắc cơ bản sau:

The client sends a service request once a secure transport layer
connection has been established. A second service request is sent
after user authentication is complete. This allows new protocols to
be defined and coexist with the protocols listed above (ba phần chính ở trên – ĐT).

Dịch vụ đầu tiên và phổ biến nhất sử dụng SSH đó là remote shell mà ta hay dùng để login từ xa. Tiếp đến là dịch vụ truyền file. Các giao thức truyền tải file phổ biến là gì? Đó là FTP, RCP. Bản thân hai chương trình này không có cơ chế bảo mật đáng tin cậy do đó việc kết hợp chúng với SSH là cần thiết, ta sẽ được SFTPSCP. Khi nói đến truyền tải file với SSH, là nói đến các chương trình truyền tải file kết hợp với giao thức SSH, mà phổ biến nhất là SFTP và SCP. Các chương trình này có thể được phân phối kèm theo các chương trình hiện thực của giao thức SSH như OpenSSH

The OpenSSH suite replaces rlogin and telnet with the ssh program, rcp with scp, and ftp with sftp. Also included is sshd (the server side of the package), and the other utilities like ssh-add, ssh-agent, ssh-keysign, ssh-keyscan, ssh-keygen and sftp-server

Nếu dùng các chương trình SSH client có giao diện (SSH Client for Windows, PuTTY) thì ta sẽ thấy rõ các chương trình tải file kèm theo. Hoặc chúng có thể được phân phối riêng biệt như WinSCP. Còn nếu sử dụng các chương trình command line như OpenSSH thì ta sẽ thấy sự tách biệt giữa các dịch vụ: để remote login thì ta sử dụng ssh, để truyền file thì ta dùng scp, sftp … Ngoài sftp và scp, còn có một chương trình tải file gọn nhẹ khác kết hợp với SSH là ssh-xfer.

Ngoài hai dịch vụ phổ biến trên thì giao thức SSH còn thường được dùng với các dịch vụ nào khác nữa?

  • in combination with rsync to backup, copy and mirror files efficiently and securely
  • for port forwarding or tunneling, frequently as an alternative to a full-fledged VPN
  • ssh and rdesktop. Three computers, the computer that will run rdesktop and ssh, a computer used to obtain access to a remote network, and the last will be the computer you want rdesktop to display
  • X11-forwarding

Sau đây một ví dụ sử dụng scp để tải file.

t3318@dongthao:~$ scp /etc/apt/sources.list dongthao@server1:
dongthao@server1's password:

sources.list               100% |*****************************|   918       00:00

Dùng ssh cho X11-forwarding cũng là một ứng dụng rất hay, tôi sẽ đề cập đến nó trong một bài viết khác. Đây quả là một chủ đề thú vị, làm tôi tiêu hết một buổi sáng Chủ Nhật cà phê :p.

Đông Thao

About dongthao

The best things in life, they are free ... (Cry on my shoulder lyric)
This entry was posted in Linux, Linux Tutorial. Bookmark the permalink.

Có 9 phản hồi tại Chuyển file với SSH

  1. dvhung nói:

    Cho “ké” một thêm một chút thông tin🙂. Để dùng scp, thì ở phía client có thể có các cách sau.
    Trên Linux:
    * Dùng command line: như Thao đã nói là dùng lện scp.
    * Dùng GUI: trên Konqueror gõ địa chỉ fish://username@hostname

    Trên Windows:
    * Dùng command line: sử dụng công cụ putty
    (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) để thực hiện lệnh scp.
    * Dùng GUI: WinSCP (http://winscp.net/)

    Trên Mac OS X:
    * Dùng command line: giống linux.
    * Dùng GUI: http://www.magicpubs.com/mac/macosx.html (trong mục Networking/File
    Transfer (e.g. SSH, sFTP, FTP))

    Nhưng mà cũng để ý là qua SSH cho phép người dùng thực hiện các lệnh khác ngoài SCP, nên phải kiểm soát việc thực thi lệnh của client chứ không thì cũng có nhiều rắc rối. Một giải pháp hay kết hợp ưu điểm của SSH và FTP là dùng sFTP.

  2. dongthao nói:

    Cám ơn anh Hưng đã góp ý. Nói đúng hơn thì các trình SSH client cho phép người dùng thực hiện các lệnh khác nhau để chạy các dịch vụ khác trên SSH. Em cũng chưa thử dùng nhiều dịch vụ trên SSH bao giờ ngoài những dịch vụ thông thường như remote login, chuyển file nên cũng không biết những rắc rối chúng gây ra là gì. Trên nguyên tắc thì những dịch vụ sẽ được tunneling qua kênh truyền của SSH. Em đoán nếu có xảy ra chắc chỉ là tranh chấp port. Anh có thể nói rõ hơn dùm em không?
    -ĐT

  3. htr3n nói:

    Trong bộ OpenSSH có sẵn sftp mà ta? dùng scp bất tiện hơn so với sftp nhiều. Server cài OpenSSH là có sẵn ssh và sftp luôn. Phía Client thì dùng bản SSH (non-commercial) ở đây: http://ftp.ssh.com/pub/ssh/

  4. dvhung nói:

    @DongThao: Ý mình là cần để ý giới hạn quyền của người được phép truy xuất vào hệ thống thông qua SSH thôi chứ cũng chưa nghĩ đến port gì đâu. Vì nếu theo cấu hình mặc định thì khi login qua SSH người dùng có thể thực thi rất nhiều command như là họ login trực tiếp vào server chứ không chỉ thực thi các command truyền tải file.
    Một số link tham khảo: http://www.penguin-soft.com/penguin/man/1/rssh.html
    http://www.dmz.ie/~cian/sshroles.html

    @Th*yHuy(cái này là mã hóa lại tên htr3n một lần nữa :-)): Đúng là OpenSSH thì có luôn ssh và sftp. Nhưng nếu nói đến hiện thực sshd nói chung thì hai món ssh và sftp là riêng mà. “Cãi” lại vậy thôi, chứ đồng ý với Th*yHuy.

  5. dvhung nói:

    Comment ngoài lề blog entry này: Blog Kỹ Thuật Máy Tính cho phép user A comment dưới tên user B🙂. Thôi kệ, để người dùng càng dễ comment càng tốt.

  6. dongthao nói:

    @A. Hưng: Đồng ý với anh
    @A. Huy: Trong bài viết em có nói là nó có thể built in hoặc có thể tách rời mà anh. Có trích dẫn nguyên câu trong OpenSSH luôn mà🙂

  7. htr3n nói:

    @Thao: Hưng hay dùng ssh để chạy MPI ầm ầm á😉
    @Hưng: vì sao lại phải giới hạn quyền truy cập của user remote nhỉ? Do nguyên tắc bảo mật (hạn chế quyền của remote user) hay là vì ssh không an toàn?

  8. Neo nói:

    Em thử xài cái putty trên window xp connect tới một Ubuntu đang chạy SSH. Nhưng chưa hiểu cách truyền file.
    Mấy anh nói rõ hơn về cách truyền file được không ?
    Cám ơn nhiều!

  9. headbull nói:

    cho em xin hỏi em có 1 bài toán như sau :

    1. Có 1 danh sách các server linux muốn coppy folder ” /ect ” – danh sách này dưới dạng IP ( theo sềp giao T_T)

    2. Back up vế máy chủ tại VN theo dạng ” /root/backup//ect

    3. Viết thành shell tự động thực thi các lệnh trên đến khi hết các server mới thôi

    em dang loay hoay với thằng này mấy hôm không biết viết thế nào vì từ trước đến h chưa gặp bài nào thế này. Rất mong được sự giúp đỡ của các anh

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s