扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
使用golang自带的http包创建http客户端调用远程服务,如果出现 : no such host
创新互联是一家专注于网站建设、成都网站制作与策划设计,荔城网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:荔城等地区。荔城做网站价格咨询:18982081108
第一种可能是服务器的最大打开文件数
```
ulimit -n #显示最大打开文件数
ulimit -n #修改最大打开文件数
```
第二种可能是没有关闭http请求导致的,加上下面这句话
```
defer resp.Body.Close()
```
Windows 2003远程桌面连接数限制
windows 2003 server远程桌面连接数限制已经困扰很久了,给平时的维护带来麻烦。既然微软不会从根本上解决这个问题,那只有通过其他方式来减少问题的发生几率。
一、在服务器端的处理办法如下(只能时避免连接数受限制,如果已经受限制,以下方法无法解决):
1.设定已经断开的会话结束时间限制,这样避免会话已经断开,但仍然占用一个Session
开始-运行-gpedit.msc-计算机配置-管理模板-windows组件-终端服务-会话,右边窗口选择“为断开的会话设置时间限制”-选择“已启用”,选择一个时间
开始-运行-gpedit.msc-计算机配置-管理模板-windows组件-终端服务-会话,右边窗口选择“到达时间限制时终止会话”-选择“已启用”。
2.无限时保持连接会话,便于远程控制共享任意时候连接会话的数据,也就是共享任意时候连接的远程桌面的当时状态:
开始-管理工具-终端服务配置-服务器配置-限制每个用户使用一个会话
3.养成良好习惯,退出出连接时不要直接关闭,而是使用注销。
二、如果已经有多个连接存在
1.可以通过命令的方式将连接断开,这个方法在2000系统同样可用;如果在任务管理器的用户里注销的方法:
1.在Command Line模式下:输入命令query user
C:\query user
USERNAMESESSIONNAMEIDSTATE IDLE TIMELOGON TIME
dfsadmin0Disc.7/23/2007 7:53 PM
mrsadminrdp-tcp#101Active.7/24/2007 9:31 AM
ID 0的用户是本地登陆的,ID 1是3389登陆的用户,正在运行中,但是仍然占用系统资源和通道,我们要把它踢掉。如下进行操作即可。
2.可通过logoff x命令来注销id未x的登录用户,输入命令:logoff 1,再用query user查询状态
C:\query user
USERNAMESESSIONNAMEIDSTATEIDLE TIMELOGON TIME
dfsadmin0Disc.7/23/2007 7:53 PM
mrsadminrdp-tcp#101Active.7/24/2007 9:31 AM
C:\logoff 1
C:\query user
USERNAMESESSIONNAMEIDSTATEIDLE TIMELOGON TIME
dfsadmin0Discnone7/23/2007 7:53 PM
三、如果连接已经受限制,从远程登录的解决方法:可以用一个“3389DOS版”软件来进行牵制登录。由于这里没办法上传附件,所以没办法。这个软件只能解决windows2003系统的限制,2000系统也没办法。
四、用如下命令形式解决超过最大连接数问题(未验证,可以尝试一下) 运行 mstsc /v:IP /console ,比如 就可以连接到远程系统的的会话。mstsc /v:211.211.0.5 /console 其实这主要是mstsc参数的了解,可通过mstsc /?学习一下。 远程桌面连接 MSTSC [<Connection File>] [/v:<sever[:port]>] [/console] [/f[ullscreen]] [/w:<width> /h:<height>] | /Edit"ConnectionFile" | /Migrate | /? <Connection File> -- 指定连接的 .rdp 文件的名称。 /v:<sever[:port]> -- 指定要连接到的终端服务器。 /console -- 连接到服务器的控制台会话。 /f -- 以全屏模式启动客户端。 /w: <width> -- 指定远程桌面屏幕的宽度。 /h:<height> -- 指定远程桌面屏幕的亮度。 /edit -- 打开指定的 .rdp 文件来编辑。 /migrate -- 将客户端连接管理器创建的旧版连接文件迁移到新的 .rdp 连接文件。 /? -- 生成这个用法消息。
资料2:
一台远程服务器,PCanywhere显示连接忙,无法连接。使用远程连接显示“超过了最大允许连接数”,第一个问题可以过去操作一下服务器,但是也必须把第二个问题解决,搜索了一下,摘抄一些有用的东西。
使用远程桌面的朋友可能经常会遇到“超出最大允许连接数”的问题,这是因为remote desktop for administrator缺省设置是2个连接,而且如果远程登录后不注销而直接关闭远程桌面,实际上session还留在服务器端,所以再次连接就很容易出现上面的提示。解决办法一是用注销来关闭远程桌面,二是限制已经断开连接的session存在的时间,三是增加连接数。
先说增加连接数,目前的两种方法,我明天去测试一下:
(1)开始- 运行- gpedit.msc- 管理模板- Windows组件- 终端服务- 限制连接数量- 启用 TS允许的最大连接数(可修改,不过好像并没有解决我的问题,远程连接服务器还是提示超过了最大允许连接数)
(2)开始- 运行- gpedit.msc- 管理模板- Windows组件- 终端服务- 限制连接数量- 选择“已禁用”,打开终端服务器配置-网卡-把那个允许最大连接数值改的大一些(经过我的测试,此种方法不可用,因为允许最大连接数不可修改,默认为2)。
第二个答案:这是因为windows2003仅支持2个终端用户的登陆。当这种情况出现后,多数人选择的是给机房打电话进行重启服务器。可是带来的损失也是显而易见的。那么我们有什么办法来解决呢?方法当然是有的。我们只需要在一台2003的机器上运行“tsmmc.msc”就可以打开远程桌面连接,在这里我们添加一个新的连接,输入对方的IP地址帐号和密码后就可以成功登陆到对方的桌面中,这时可以再踢下一个用户。就可以解决终端连接数超过最大的问题。
第三个答案:
1、修改终端服务配置
开始 -〉控制面板 -〉管理工具 -〉终端服务配置
左边选择“连接”后双击右边的RDP-Tcp,打开属性设置对话框
选择“会话”标签,选中第一个“替代用户设置”,修改“结束已断开的会话”的时间,此处我修改为“10分钟”,这样当断开连接10分钟内没有再次连接的话,系统就会自动结束这个会话
2、修改组策略
这个级别要高于终端服务配置,在这个里面修改后,上面的终端服务配置那几个修改内容就会变灰,无法修改了。
开始 -〉运行 -〉gpedit.msc 左面计算机配置-〉管理模板-〉windows组件-〉终端服务
右面双击限制连接数量打开设置对话框,选择“已启用”,在结束已断开的会话中选择时间。
问题1:
远程桌面断开链结后如何实现自动注销,不需要用管理员帐号登录服务器手动注销该用户名?
回答:
当您对独享服务器时,可能会遇到由于本地到服务器端网络不稳定、客户端主机突然死机等原因造成远程桌面突然断开,并尝试多次连接后仍然中断,却又达到最大远程桌面连接数后,只能通过重启服务器来解决的问题。现在我们就来通过对服务器端的设置解决此问题: EYIiIQ2 Ny
P~F3K{.1
首先登陆服务器点击:开始---设置---控制面板---管理工具---终端服务配置,打开“终端服务配置”配置后,我们点击窗口左侧“连接”,此时窗口右侧列出RDP-Tcp,右键点击RDP-Tcp连接---属性,再点击“会话”标签,我们将“替代用户设置”钩选,并将“结束已断开的会话”设置为10分钟,点击“确定”设置完毕。见下图示
这样设置完毕后您就不用担心维护服务器时遇到此类问题的烦恼,当您本地与服务器端异常中断时,耐心等待10分钟后,服务器端将自动注销上次的远程连接。10分钟后您可以再次成功远程登陆服务器进行工作。
golang SSH客户端系列文章目录
SSH(Secure Shell)协议在远程登录时比较常用,但是除此之外还有一些其它的功能也很好用,比如端口映射,X11转发,sftp文件传输等。
以下三篇文章将介绍golang版SSH的远程登录功能,端口映射功能及sftp文件传输功能。X11包含GUI的一些操作,没有找到相关的包,故不做介绍
通过golang自带的ssh包 golang.org/x/crypto/ssh 可以实现远程登录功能, 默认是不支持tab键和上下箭头的 ,
通过导入golang.org/x/crypto/ssh/terminal来创建VT100终端可以支持tab等功能,让golang版本的ssh客户端体验和平时用的其它客户端差不多。
一般命令
所谓一般命令,就是在一定时间内会执行完的命令。比如 grep, cat 等等。 执行命令的步骤是:连接,执行,获取结果
连接
连接包含了认证,可以使用 password 或者 sshkey 2种方式来认证。下面的示例为了简单,使用了密码认证的方式来完成连接。
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,
Timeout: 30 * time.Second,
}
// 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 nil, err
}
return session, nil
}
连接的方法很简单,只要提供登录主机的 用户*, *密码*, *主机名或者IP*, *SSH端口
执行,命令获取结果
连接成功后,执行命令很简单
import (
"fmt"
"log"
"os"
"time"
"golang.org/x/crypto/ssh"
)
func main() {
session, err := connect("root", "xxxxx", "127.0.0.1", 22)
if err != nil {
log.Fatal(err)
}
defer session.Close()
session.Run("ls /; ls /abc")
}
上面代码运行之后,虽然命令正常执行了,但是没有正常输出的结果,也没有异常输出的结果。 要想显示结果,需要将 session 的 Stdout 和 Stderr 重定向 修改 func main 为如下:
func main() {
session, err := connect("root", "xxxxx", "127.0.0.1", 22)
if err != nil {
log.Fatal(err)
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Run("ls /; ls /abc")
}
这样就能在屏幕上显示正常,异常的信息了。
交互式命令
上面的方式无法远程执行交互式命令,比如 top , 远程编辑一个文件,比如 vi /etc/nginx/nginx.conf 如果要支持交互式的命令,需要当前的terminal来接管远程的 PTY。
func main() {
session, err := connect("root", "olordjesus", "dockers.iotalabs.io", 2210)
if err != nil {
log.Fatal(err)
}
defer session.Close()
fd := int(os.Stdin.Fd())
oldState, err := terminal.MakeRaw(fd)
if err != nil {
panic(err)
}
defer terminal.Restore(fd, oldState)
// excute command
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Stdin = os.Stdin
termWidth, termHeight, err := terminal.GetSize(fd)
if err != nil {
panic(err)
}
// Set up terminal modes
modes := ssh.TerminalModes{
ssh.ECHO: 1, // enable echoing
ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
}
// Request pseudo terminal
if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil {
log.Fatal(err)
}
session.Run("top")
}
1、在电脑桌面上,鼠标单击【开始】,移动到【所有程序上】
2、鼠标拖动滚动条,找到【附件】,在附件的文件夹下继续找到程序【远程桌面连接】,经常使用的可以右键发送到桌面快捷方式,方便以后使用。
3、也可以使用快捷键【Win+R】调出运行,输入【mstsc】回车
4、在远程连接的界面中,点击【显示选项】,在计算机中输入远程服务器的IP地址,以及用户名
5、接着会提示输入密码,输入你的服务器密码即可,不知道密码的可以去服务器提供商的后台修改密码即可。勾选【记住凭据】,之后远程就不需要再次输入密码了。
6、接着连接成功就会出现服务器界面。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流