解决办法是在个人用户的.ssh文件夹下创建一个名为config的配置文件,文件中写入以下内容
Host gitee.com
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
指令就是你执行的shell命令 比如我要运行php 输入: php test.php 就会执行 第一个php是执行程序的名称
SSH(Secure Shell)协议在远程登录时比较常用,但是除此之外还有一些其它的功能也很好用,比如端口映射,X11转发,sftp文件传输等.
以下三篇文章将介绍golang版SSH的远程登录功能,端口映射功能及sftp文件传输功能.X11包含GUI的一些操作,没有找到相关的包,故不做介绍
通过golang自带的ssh包 golang.org/x/crypto/ssh 可以实现远程登录功能, 默认是不支持tab键和上下箭头的 ,
一般命令
所谓一般命令,就是在一定时间内会执行完的命令.比如 grep, cat 等等. 执行命令的步骤是:连接,执行,获取结果
连接
import (
"fmt"
"time"
"golang.org/x/crypto/ssh"
)
func connect(user, password, host string, port int) (*ssh.Session, error) {
var (
auth []ssh.AuthMethod
addr string
clientConfig *ssh.ClientConfig
client *ssh.Client
session *ssh.Session
err error
// get auth method
auth = make([]ssh.AuthMethod, 0)
auth = append(auth, ssh.Password(password))
clientConfig = ssh.ClientConfig{
User: user,
Auth: auth,
}
// connet to ssh
addr = fmt.Sprintf("%s:%d", host, port)
if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
return nil, err
// create session
if session, err = client.NewSession(); err != nil {
return session, nil
连接的方法很简单,只要提供登录主机的 用户*, *密码*, *主机名或者IP*, *SSH端口
执行,命令获取结果
连接成功后,执行命令很简单
"log"
"os"
func main() {
if err != nil {
log.Fatal(err)
defer session.Close()
session.Run("ls /; ls /abc")
上面代码运行之后,虽然命令正常执行了,但是没有正常输出的结果,也没有异常输出的结果. 要想显示结果,需要将 session 的 Stdout 和 Stderr 重定向 修改 func main 为如下:
session.Stdout = os.Stdout
session.Stderr = os.Stderr
这样就能在屏幕上显示正常,异常的信息了.
交互式命令
fd := int(os.Stdin.Fd())
oldState, err := terminal.MakeRaw(fd)
panic(err)
defer terminal.Restore(fd, oldState)
// excute command
session.Stdin = os.Stdin
termWidth, termHeight, err := terminal.GetSize(fd)
// Set up terminal modes
modes := ssh.TerminalModes{
ssh.ECHO: 1, // enable echoing
// Request pseudo terminal
session.Run("top")
以上就是土嘎嘎小编为大家整理的go语言ssh相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!