|
本帖最后由 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登录/安装的问题了,改改就可以用了。。。
- package main
- import (
- "fmt"
- "golang.org/x/crypto/ssh"
- //"golang.org/x/crypto/ssh/terminal"
- "io/ioutil"
- "log"
- "os"
- "os/user"
- "time"
- )
- func main() {
- //for test ,get rsa key file
- key, err := getKeyFile()
- if err != nil {
- panic(err)
- } else {
- println("keyfile is %d ", key)
- }
- //get ssh session
- session, err := connect("root", "密码", nil, "198.IP", 22)
- if err != nil {
- log.Fatal(err)
- }
- defer session.Close()
- //defind a cmd to exec
- cmd := "ifconfig "
- RunOnce(session, cmd)
- }
- //利用本地的shell 直接连接到 远程的shell上去,按tab无法不全,上下键盘无法使用。
- func Interact(session *ssh.Session, cmd string) {
- var err error
- session.Stdout = os.Stdout
- session.Stderr = os.Stderr
- ce := func(err error, msg string) {
- if err != nil {
- log.Fatalf("%s error: %v", msg, err)
- }
- }
- session.Stdin = os.Stdin //输入
- modes := ssh.TerminalModes{
- ssh.ECHO: 0,
- ssh.TTY_OP_ISPEED: 14400,
- ssh.TTY_OP_OSPEED: 14400,
- }
- // Request pseudo terminal
- if err := session.RequestPty("xterm", 25, 80, modes); err != nil {
- log.Fatal(err)
- }
- //session.Run("ls /; ls /abc")
- err = session.Shell()
- ce(err, "start shell")
- err = session.Wait()
- ce(err, "return")
- //session.Run("wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh s")
- }
- //执行一次Shell脚本,获得所有记录后返回
- func RunOnce(session *ssh.Session, cmd string) {
- session.Stdout = os.Stdout
- session.Stderr = os.Stderr
- session.Run(cmd)
- //print(str)
- //print(str2)
- //session.Run("wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh s")
- }
- //---------------------Private Func for SSH connect-------------------------------------
- //连接服务端,如果是走rsa file的花,则keyfile存ssh.Signer值,否则nil
- func connect(user string, password string, key ssh.Signer, 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)
- if key == nil {
- auth = append(auth, ssh.Password(password))
- } else {
- auth = append(auth, ssh.PublicKeys(key))
- }
- 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
- }
- //Get RSA private key File ,and then the app can use RSA key for connect
- func getKeyFile() (key ssh.Signer, err error) {
- usr, _ := user.Current()
- file := usr.HomeDir + "/.ssh/id_rsa"
- buf, err := ioutil.ReadFile(file)
- if err != nil {
- return
- }
- key, err = ssh.ParsePrivateKey(buf)
- if err != nil {
- return
- }
- return
- }
复制代码
|
|