全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1401|回复: 13
打印 上一主题 下一主题

庆祝破元老,赠送坚毅人士一个点子

[复制链接]
跳转到指定楼层
1#
发表于 2017-4-11 23:32:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Eric.c 于 2017-4-11 23:44 编辑

话说lz已经改撸爬虫去了,

且庆祝破元老,赠送坚毅人士一个点子:


坚毅人士可尝试:

第一步:
写一Web网站,主要功能是输入linux服务器的账号密码,
然后程序可根据需要自动登录linux服务器,自动安装ss/vp嗯/lnmp等一键脚本。当然还有时下流行的docker。。。


第二步:
关联linode/vultr/do/gce的api,可以动态监控这些vps的各项指标和快捷操作。 然后再获取aff

第三步【可选】
推出app, 上架。


盈利分析:


1/  单管理vps 免费,多管理收费。
2/  收取aff费用
3/  进一步通过app 加大这个功能
4/  one man idc


预测人均付费:
1. 软件授权费50大洋。
  2. Aff 费用 50大洋


即1人能赚取100大洋,月销售50单,也有5k。。。。

重要提醒:
别以安全不安全来影响销量。。。小白不需要安全,需要灰机;此外开源版本5k也是可以出售的嘛。





Any Way: 需要坚持下去。。。 程序不难,难的是坚持。。。









--------------------

贡献golang 脚本一份,已经帮你解决了ssh登录/安装的问题了,改改就可以用了。。。

  1. package main

  2. import (
  3.         "fmt"
  4.         "golang.org/x/crypto/ssh"
  5.         //"golang.org/x/crypto/ssh/terminal"
  6.         "io/ioutil"
  7.         "log"
  8.         "os"
  9.         "os/user"
  10.         "time"
  11. )

  12. func main() {

  13.         //for test ,get rsa key file
  14.         key, err := getKeyFile()
  15.         if err != nil {
  16.                 panic(err)
  17.         } else {
  18.                 println("keyfile is %d  ", key)
  19.         }
  20.         //get ssh session

  21.         session, err := connect("root", "密码", nil, "198.IP", 22)
  22.         if err != nil {
  23.                 log.Fatal(err)
  24.         }
  25.         defer session.Close()

  26.         //defind a cmd to exec
  27.         cmd := "ifconfig "
  28.         RunOnce(session, cmd)

  29. }

  30. //利用本地的shell 直接连接到 远程的shell上去,按tab无法不全,上下键盘无法使用。
  31. func Interact(session *ssh.Session, cmd string) {
  32.         var err error

  33.         session.Stdout = os.Stdout
  34.         session.Stderr = os.Stderr

  35.         ce := func(err error, msg string) {
  36.                 if err != nil {
  37.                         log.Fatalf("%s error: %v", msg, err)
  38.                 }
  39.         }

  40.         session.Stdin = os.Stdin //输入

  41.         modes := ssh.TerminalModes{
  42.                 ssh.ECHO:          0,
  43.                 ssh.TTY_OP_ISPEED: 14400,
  44.                 ssh.TTY_OP_OSPEED: 14400,
  45.         }
  46.         // Request pseudo terminal
  47.         if err := session.RequestPty("xterm", 25, 80, modes); err != nil {
  48.                 log.Fatal(err)
  49.         }

  50.         //session.Run("ls /; ls /abc")

  51.         err = session.Shell()
  52.         ce(err, "start shell")

  53.         err = session.Wait()
  54.         ce(err, "return")

  55.         //session.Run("wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh s")

  56. }

  57. //执行一次Shell脚本,获得所有记录后返回
  58. func RunOnce(session *ssh.Session, cmd string) {

  59.         session.Stdout = os.Stdout
  60.         session.Stderr = os.Stderr

  61.         session.Run(cmd)

  62.         //print(str)
  63.         //print(str2)

  64.         //session.Run("wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh s")

  65. }

  66. //---------------------Private Func for SSH connect-------------------------------------
  67. //连接服务端,如果是走rsa file的花,则keyfile存ssh.Signer值,否则nil
  68. func connect(user string, password string, key ssh.Signer, host string, port int) (*ssh.Session, error) {
  69.         var (
  70.                 auth         []ssh.AuthMethod
  71.                 addr         string
  72.                 clientConfig *ssh.ClientConfig
  73.                 client       *ssh.Client
  74.                 session      *ssh.Session
  75.                 err          error
  76.         )

  77.         // get auth method
  78.         auth = make([]ssh.AuthMethod, 0)
  79.         if key == nil {
  80.                 auth = append(auth, ssh.Password(password))
  81.         } else {
  82.                 auth = append(auth, ssh.PublicKeys(key))
  83.         }

  84.         clientConfig = &ssh.ClientConfig{
  85.                 User:    user,
  86.                 Auth:    auth,
  87.                 Timeout: 30 * time.Second,
  88.         }

  89.         // connet to ssh
  90.         addr = fmt.Sprintf("%s:%d", host, port)

  91.         if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
  92.                 return nil, err
  93.         }

  94.         // create session
  95.         if session, err = client.NewSession(); err != nil {
  96.                 return nil, err
  97.         }

  98.         return session, nil
  99. }

  100. //Get RSA private key File ,and then the app can use RSA key for connect
  101. func getKeyFile() (key ssh.Signer, err error) {
  102.         usr, _ := user.Current()
  103.         file := usr.HomeDir + "/.ssh/id_rsa"
  104.         buf, err := ioutil.ReadFile(file)
  105.         if err != nil {
  106.                 return
  107.         }
  108.         key, err = ssh.ParsePrivateKey(buf)
  109.         if err != nil {
  110.                 return
  111.         }
  112.         return
  113. }
复制代码

2#
发表于 2017-4-11 23:34:33 来自手机 | 只看该作者
看不懂大佬说的话
3#
 楼主| 发表于 2017-4-11 23:41:14 | 只看该作者

技术花样赚钱
4#
发表于 2017-4-11 23:55:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
5#
发表于 2017-4-11 23:56:34 | 只看该作者
我也想到啦,可惜没精力去做,
suzizi 该用户已被删除
6#
发表于 2017-4-12 15:55:24 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
7#
发表于 2017-4-12 15:59:00 来自手机 | 只看该作者
大佬 稳。我先把ssh做出来
9#
发表于 2017-4-12 16:05:45 | 只看该作者
dalao说的话,我只当山上的一缕清风,可惜我不是个诗人
10#
发表于 2017-4-12 16:07:19 | 只看该作者
使用频次不高吧???
谁会不停的连ssh啊
谁会天天没事重装环境啊
谁手里会有一大堆的vps要批量操作啊


您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-7-8 21:23 , Processed in 0.070465 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表