ssh2
Version, currently master branch1 version
- master branchlatestJun 14, 2020
github.com/datanoise/ssh2.cr
libssh2 binding for Crystal language
41 stars
1 dependent
License: MIT
Installation
# Add this to your shard.yml
dependencies:
ssh2:
github: datanoise/ssh2.cr
branch: mastermaster is a branch, not a release, so this tracks it rather than pinning a version.
Then run:
shards installshard.yml
- Crystal
- no constraint declared
- License
- MIT
- Author
- datanoise (https://github.com/datanoise)
Dependencies
This version declares no dependencies.
README
# ssh2.cr
This library provides binding for libssh2 library.
# Status
*Alpha*
# Requirements
- Crystal language version 0.17 and higher.
- libssh2 version 1.5.0 or higher
You can use `homebrew` to install the latest libssh2:
```
$ brew install libssh2
```
# Goal
The goal is to utilize libssh2 API by providing services like ability to run
shell commands via ssh as well as scp and sftp services.
# Usage
An example of running a shell command via SSH on the remote server:
```crystal
require "./src/ssh2"
SSH2::Session.open("my_server") do |session|
session.login("username", "password")
session.open_session do |channel|
channel.command("uptime")
IO.copy(channel, STDOUT)
end
end
```
An example of running shell:
```crystal
require "./src/ssh2"
SSH2::Session.open("localhost", 2222) do |session|
session.login_with_pubkey("root", "./spec/keys/id_rsa")
session.open_session do |ch|
ch.request_pty("vt100")
ch.shell
session.blocking = false
buf_space = uninitialized UInt8[1024]
buf = buf_space.to_slice
loop do
io = IO.select([STDIN, ch.socket]).first
if io == STDIN
command = gets
if command
ch.write(command.to_slice)
end
elsif io == ch.socket
len = ch.read(buf).to_i32
print String.new buf[0, len]
break if ch.eof?
end
end
end
end
```
An example of using SFTP API:
```crystal
require "./src/ssh2"
SSH2::Session.open("localhost", 2222) do |session|
session.login_with_pubkey("root", "./spec/keys/id_rsa")
session.sftp_session do |sftp|
sftp.open_dir(".").ll do |fn|
puts fn
end
file = sftp.open(".bashrc")
puts file.gets_to_end
end
end
```
# Testing
In order to run test suite you need to pull and run the following docker container:
```
$ docker pull tutum/ubuntu:trusty
$ docker run -d -p 2222:22 -e AUTHORIZED_KEYS="`cat ./spec/keys/id_rsa.pub`" tutum/ubuntu:trusty
```
# License
MIT clause - see LICENSE for more details.
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This branch
- Branch
master- Seen
- Jun 14, 2020
- Indexed
- yes
Dependents
Repository
github.com/datanoise/ssh2.cr
Metadata
- Created
- Aug 12, 2026
- Updated
- Aug 12, 2026
- Synced
- Aug 12, 2026
- Versions
- 1